最新の安定バージョンについては、Spring Boot 4.1.1 を使用してください!

グレースフルシャットダウン

グレースフルシャットダウンは、4 つの組み込み Web サーバー(Jetty、Reactor Netty、Tomcat、Undertow)すべてと、リアクティブおよびサーブレットベースの Web アプリケーションの両方でサポートされています。これはアプリケーションコンテキストを閉じる処理の一部として発生し、SmartLifecycle (Javadoc) Bean の停止処理の初期段階で実行されます。この停止処理ではタイムアウトが使用され、既存のリクエストは完了できる猶予期間が設けられますが、新しいリクエストは受け付けられません。

新しいリクエストが許可されない具体的な方法は、使用されている Web サーバーによって異なります。実装によっては、ネットワーク層でリクエストの受け入れを停止したり、特定の HTTP ステータスコードまたは HTTP ヘッダーを含むレスポンスを返すことがあります。永続的な接続を使用すると、リクエストの受け入れを停止する方法が変わることもあります。

Jetty、Reactor Netty、および Tomcat は、ネットワーク層での新規リクエストの受付を停止します。Undertow は新規接続を受け付けますが、すぐにサービス利用不可 (503) のレスポンスを返します。

グレースフルシャットダウンを有効にするには、次の例に示すように、server.shutdown プロパティを構成します。

  • プロパティ

  • YAML

server.shutdown=graceful
server:
  shutdown: "graceful"

タイムアウト期間を構成するには、次の例に示すように、spring.lifecycle.timeout-per-shutdown-phase プロパティを構成します。

  • プロパティ

  • YAML

spring.lifecycle.timeout-per-shutdown-phase=20s
spring:
  lifecycle:
    timeout-per-shutdown-phase: "20s"
IDE が適切な SIGTERM シグナルを送信しない場合、IDE でグレースフルシャットダウンを使用すると正しく機能しない可能性があります。詳細については、IDE のドキュメントを参照してください。