1. 序章

Spring Bootは、さまざまなユースケース向けの新しいJavaアプリケーションをすばやく作成するための優れたフレームワークです。 最も一般的な用途の1つは、サポートされている多くの組み込みサーブレットコンテナとテンプレートエンジンの1つを使用するWebサーバーとしての使用です。

ただし、 Spring Bootには、Webサーバーを必要としない多くの用途がありますコンソールアプリケーション、ジョブスケジューリング、バッチまたはストリーム処理、サーバーレスアプリケーションなど。

このチュートリアルでは、WebサーバーなしでSpring Bootを使用するいくつかの異なる方法を見ていきます。

2. 依存関係の使用

Spring Bootアプリケーションが組み込みWebサーバーを起動しないようにする最も簡単な方法は、依存関係にWebサーバースターターを含めないことです

これは、spring-boot-starter-web依存関係をMavenPOMまたはGradleビルドファイルに含めないことを意味します。 代わりに、より基本的なspring-boot-starter依存関係を代わりに使用する必要があります。

Tomcatの依存関係が推移的な依存関係としてアプリケーションに含まれる可能性があることに注意してください。 この場合、Tomcatライブラリをどの依存関係に含めるかから除外する必要があるかもしれません。

3. Springアプリケーションの変更

Spring Bootで組み込みWebサーバーを無効にする別の方法は、コードを使用することです。 SpringApplicationBuilderのいずれかを使用できます。

new SpringApplicationBuilder(MainApplication.class)
  .web(WebApplicationType.NONE)
  .run(args);

または、SpringApplicationへの参照を使用できます。

SpringApplication application = new SpringApplication(MainApplication.class);
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);

いずれの場合も、クラスパスでサーブレットとコンテナのAPIを利用できるようにしておくという利点があります。 これは、Webサーバーを起動しなくてもWebサーバーライブラリを使用できることを意味します。 これは、たとえば、それらを使用してテストを記述したり、独自のコードでAPIを使用したりする場合に役立ちます。

4. アプリケーションプロパティの使用

コードを使用してWebサーバーを無効にすることは静的なオプションであり、どこにデプロイしてもアプリケーションに影響します。 しかし、特定の状況でWebサーバーを作成したい場合はどうでしょうか。

この場合、Springアプリケーションのプロパティを使用できます。

spring.main.web-application-type=none

または、同等のYAMLを使用します。

spring:
  main:
    web-application-type: none

このアプローチの利点は、Webサーバーを条件付きで有効にできることです。 Springプロファイルまたは条件付きを使用して、さまざまな展開でWebサーバーの動作を制御できます。

たとえば、セキュリティ上の理由から本番環境では無効にしたまま、メトリクスまたはその他のSpringエンドポイントを公開するためだけに開発中のWebサーバーを実行することができます。

一部の以前のバージョンのSpringBootは、web-environmentという名前のブールプロパティを使用してWebサーバーを有効または無効にしたことに注意してください。 Spring Bootで従来のコンテナとリアクティブコンテナの両方が採用されたことにより、プロパティの名前が変更され、列挙型が使用されるようになりました。

5. 結論

WebサーバーなしでSpringBootアプリケーションを作成する理由はたくさんあります。 このチュートリアルでは、これを行うための複数の方法を見てきました。 それぞれに長所と短所があるため、ニーズに最適なアプローチを選択する必要があります。