優雅停機

優雅停機預設在所有四種嵌入式 Web 伺服器(Jetty, Reactor Netty, Tomcat 和 Undertow)以及響應式和基於 Servlet 的 Web 應用中啟用。它作為關閉應用上下文的一部分發生,並在停止SmartLifecycle bean 的最早階段執行。此停止過程使用一個超時時間,提供了一個緩衝期,在此期間現有請求將被允許完成,但不再允許新的請求。

要配置超時時間,請配置 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 文件。

在緩衝期拒絕請求

拒絕新請求的具體方式取決於正在使用的 Web 伺服器。實現方式可能是在網路層停止接受請求,或者返回帶有特定 HTTP 狀態碼或 HTTP 頭的響應。使用持久連線也可能改變請求停止接受的方式。

Jetty, Reactor Netty 和 Tomcat 將在網路層停止接受新請求。Undertow 會接受新連線,但會立即響應服務不可用 (503)。

停用優雅停機

要停用優雅停機,請配置 server.shutdown 屬性,如下例所示

  • 屬性

  • YAML

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