优雅停机
所有四个嵌入式 Web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及基于响应式和 Servlet 的 Web 应用程序都支持优雅关闭。它作为关闭应用程序上下文的一部分发生,并在停止SmartLifecycle
Bean 的最早阶段执行。此停止处理使用超时,该超时提供一个宽限期,在此期间,允许现有请求完成,但不再允许新的请求。
不允许新请求的确切方式取决于正在使用的 Web 服务器。实现可能会在网络层停止接受请求,或者它们可能会返回带有特定 HTTP 状态代码或 HTTP 标头的响应。持久连接的使用也会改变请求停止接受的方式。
要详细了解与您的 Web 服务器一起使用的特定方法,请参阅shutDownGracefully API 文档,了解TomcatWebServer.shutDownGracefully(GracefulShutdownCallback) 、NettyWebServer.shutDownGracefully(GracefulShutdownCallback) 、JettyWebServer.shutDownGracefully(GracefulShutdownCallback) 或UndertowWebServer.shutDownGracefully(GracefulShutdownCallback) 。 |
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 的文档。 |