1. 概要

このチュートリアルでは、SpringBootServletInitializerの簡単な紹介を行います。

これはWebApplicationInitializerの拡張であり、はWebコンテナにデプロイされた従来のWARアーカイブからSpringApplicationを実行します。 このクラスは、 Servlet Filter 、およびServletContextInitializerBeanをアプリケーションコンテキストからサーバーにバインドします。

SpringBootServletInitializer クラスを拡張すると、 configure()メソッドをオーバーライドすることで、サーブレットコンテナによって実行されるときにアプリケーションを構成することもできます。

2. SpringBootServletInitializer

より実用的にするために、Initializerクラスを拡張するメインクラスの例を示します。

WarInitializerApplicationと呼ばれる@SpringBootApplicationクラスは、 SpringBootServletInitializer を拡張し、 configure()メソッドをオーバーライドします。 このメソッドは、 SpringApplicationBuilder を使用して、クラスをアプリケーションの構成クラスとして登録するだけです。

@SpringBootApplication
public class WarInitializerApplication extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(
      SpringApplicationBuilder builder) {
        return builder.sources(WarInitializerApplication.class);
    }

    public static void main(String[] args) {
        SpringApplication sa = new SpringApplication(
          WarInitializerApplication.class);
        sa.run(args);
    }

    @RestController
    public static class WarInitializerController {

        @GetMapping("/")
        public String handler() {
           // ...
        }
    }
}

これで、アプリケーションをWARとしてパッケージ化すると、従来の方法で任意のWebコンテナーにデプロイできるようになります。これにより、 configure()メソッドで追加したロジックも実行されます。

それをJARファイルとしてパッケージ化する場合は、 main()メソッドに同じロジックを追加して、組み込みコンテナーもそれを取得できるようにする必要があります。

3. 結論

この記事では、 SpringBootServletInitializer を紹介し、それを使用して従来のWARアーカイブからSpringBootアプリケーションを実行する方法を示しました。

この例の完全なソースコードは、GitHubでを介して入手できます。これはMavenベースのプロジェクトであるため、そのままインポートして使用できます。