1. 概要 

このクイックチュートリアルでは、Spring Boot2のEmbeddedServletContainerCustomizerConfigurableEmbeddedServletContainerを置き換える方法を説明します。

これらのクラスは以前のバージョンのSpringBootの一部でしたが、SpringBoot2から削除されました。 もちろん、機能は、インターフェースWebServerFactoryCustomizerおよびクラスConfigurableServletWebServerFactory。を介して引き続き使用できます。

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

2. SpringBoot2より前

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

@Component
public class CustomContainer implements EmbeddedServletContainerCustomizer {
 
    @Override
    public void customize(ConfigurableEmbeddedServletContainer container) {
        container.setPort(8080);
        container.setContextPath("");
     }
}

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

これを実現する別の可能性は、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. SpringBoot2にアップグレードする

Spring Boot 2では、 EmbeddedServletContainerCustomizerインターフェイスがWebServerFactoryCustomizerに置き換えられ、ConfigurableEmbeddedServletContainerクラスがConfigurableServletWebServerFactoryに置き換えられました。

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

public class CustomContainer implements 
  WebServerFactoryCustomizer<ConfigurableServletWebServerFactory> {
 
    public void customize(ConfigurableServletWebServerFactory factory) {
        factory.setPort(8080);
        factory.setContextPath("");
     }
}

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

@Component
public class CustomContainer implements 
  WebServerFactoryCustomizer<TomcatServletWebServerFactory> {

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

同様に、削除されたJettyEmbeddedServletContainerFactoryおよびUndertowEmbeddedServletContainerFactoryと同等のJettyServletWebServerFactoryおよびUndertowServletWebServerFactoryがあります。

4. 結論

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

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