优雅停机
优雅停机默认在所有四种嵌入式 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)。