優雅關閉
所有四種嵌入式 Web 伺服器 (Jetty、Reactor Netty、Tomcat 和 Undertow) 以及反應式和基於 Servlet 的 Web 應用程式都支援優雅關閉。它發生在關閉應用程式上下文的過程中,並在停止 SmartLifecycle
beans 的最早階段執行。此停止處理使用逾時,以提供寬限期,在此期間將允許現有請求完成,但不允許新的請求。
不允許新請求的確切方式,會根據使用的 Web 伺服器而有所不同。實作可能會在網路層停止接受請求,或者它們可能會傳回具有特定 HTTP 狀態碼或 HTTP 標頭的回應。 持續連線的使用也可能會改變請求停止被接受的方式。
若要瞭解更多關於您的 Web 伺服器所使用的特定方法,請參閱 TomcatWebServer.shutDownGracefully(GracefulShutdownCallback) 、NettyWebServer.shutDownGracefully(GracefulShutdownCallback) 、JettyWebServer.shutDownGracefully(GracefulShutdownCallback) 或 UndertowWebServer.shutDownGracefully(GracefulShutdownCallback) 的 shutDownGracefully API 文件。 |
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 文件以取得更多詳細資訊。 |