优雅关机
默认情况下,所有四种嵌入式 Web 服务器(Jetty、Reactor Netty、Tomcat 和 Undertow)以及基于反应式和 Servlet 的 Web 应用程序都启用了优雅关闭。优雅关闭作为关闭应用程序上下文的一部分,并在停止 SmartLifecycle Bean 的最早阶段执行。此停止过程使用一个超时时间,该超时时间提供了一个宽限期,在此期间允许现有请求完成,但不允许新的请求。
要配置超时时间,可以配置 spring.lifecycle.timeout-per-shutdown-phase
属性,如下例所示:
- Properties
- YAML
spring.lifecycle.timeout-per-shutdown-phase=20s
spring:
lifecycle:
timeout-per-shutdown-phase: "20s"
如果您的 IDE 没有发送正确的 SIGTERM
信号,关闭操作可能会立即执行,而不是优雅地关闭。请参阅您的 IDE 文档以获取更多详细信息。
优雅关闭期间的请求拒绝
新请求不被允许的确切方式取决于所使用的 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
属性,如下例所示:
- Properties
- YAML
server.shutdown=immediate
server:
shutdown: "immediate"