1概要

このチュートリアルでは、

SpringBootServletInitializer

について簡単に紹介します。

これは

WebApplicationInitializer

の拡張で、Webコンテナにデプロイされた従来のWARアーカイブから

SpringApplication

を実行します。このクラスは、

Servlet



Filter

、および

ServletContextInitializer

Beanをアプリケーションコンテキストからサーバーにバインドします。


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アーカイブからSpring Bootアプリケーションを実行する方法を説明しました。

この例の完全なソースコードは、https://github.com/eugenp/tutorials/tree/master/spring-boot[GitHubで利用できます。です。