Spring Boot 2のコンテナ設定

Spring Boot 2のコンテナ構成

1. 概要

このクイックチュートリアルでは、Spring Boot 2でEmbeddedServletContainerCustomizerConfigurableEmbeddedServletContainerを置き換える方法を見ていきます。

これらのクラスは以前のバージョンのSpring Bootの一部でしたが、Spring Boot 2から削除されました。 もちろん、the functionality is still available through the interface WebServerFactoryCustomizer and the class *ConfigurableServletWebServerFactory*.

これらの使用方法を見てみましょう。

2. Spring Boot2より前

まず、古いクラスとインターフェイスを使用し、置き換える必要がある構成を見てみましょう。

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.setPort(8080);
        container.setContextPath("");
     }
}

ここでは、サーブレットコンテナのポートとコンテキストパスをカスタマイズしています。

これを実現するもう1つの可能性は、TomcatなどのコンテナタイプにConfigurableEmbeddedServletContainer,のより具体的なサブクラスを使用することです。

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {

    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        if (container instanceof TomcatEmbeddedServletContainerFactory) {
            TomcatEmbeddedServletContainerFactory tomcatContainer =
              (TomcatEmbeddedServletContainerFactory) container;
            tomcatContainer.setPort(8080);
            tomcatContainer.setContextPath("");
        }
    }
}

3. Spring Boot2にアップグレードする

Spring Boot 2では、the EmbeddedServletContainerCustomizer interface is replaced by WebServerFactoryCustomizer, while the ConfigurableEmbeddedServletContainer class is replaced with ConfigurableServletWebServerFactory.

Spring Boot2プロジェクトの前の例を書き直してみましょう。

public class CustomContainer implements
  WebServerFactoryCustomizer {

    public void customize(ConfigurableServletWebServerFactory factory) {
        factory.setPort(8080);
        factory.setContextPath("");
     }
}

そして、2番目の例ではTomcatServletWebServerFactory:を使用します

@Component
public class CustomContainer implements
  WebServerFactoryCustomizer {

    @Override
    public void customize(TomcatServletWebServerFactory factory) {
        factory.setContextPath("");
        factory.setPort(8080);
    }
}

同様に、削除されたJettyEmbeddedServletContainerFactoryUndertowEmbeddedServletContainerFactory.に相当するものとして、JettyServletWebServerFactoryUndertowServletWebServerFactoryがあります。

4. 結論

この短い記事では、Spring Bootアプリケーションをバージョン2.xにアップグレードするときに発生する可能性のある問題を修正する方法を示しました。

Spring Boot 2プロジェクトの例は、GitHub repositoryにあります。