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

正常なシャットダウンは、4 つの組み込み Web サーバー (Jetty、Reactor、Netty、Tomcat、Undertow) すべてと、リアクティブ Web アプリケーションおよびサーブレットベースの Web アプリケーションの両方でデフォルトで有効になっています。これは、アプリケーションコンテキストを閉じる際に発生し、SmartLifecycle (Javadoc) Bean を停止する最も早い段階で実行されます。この停止処理では、タイムアウトが使用されます。タイムアウトによって猶予期間が与えられ、その間は既存のリクエストは完了できますが、新しいリクエストは許可されません。

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

  • プロパティ

  • YAML

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

猶予期間中のリクエストの拒否

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

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

正常なシャットダウンを無効にする

正常なシャットダウンを無効にするには、次の例に示すように、server.shutdown プロパティを構成します。

  • プロパティ

  • YAML

server.shutdown=immediate
server:
  shutdown: "immediate"