正常关闭
默认情况下,所有四个嵌入式 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 中的关闭没有发送正确的信号,则可能是立即的,而不是正常的。
有关更多详细信息,请参阅 IDE 的文档。SIGTERM |
在宽限期内拒绝请求
不允许新请求的确切方式因所使用的 Web 服务器而异。 实现可能会在网络层停止接受请求,或者它们可能会返回具有特定 HTTP 状态代码或 HTTP 标头的响应。 使用持久连接还可以更改停止接受请求的方式。
要了解有关 Web 服务器使用的特定方法的更多信息,请参阅 TomcatWebServer.shutDownGracefully(GracefulShutdownCallback)、 NettyWebServer.shutDownGracefully(GracefulShutdownCallback)、 JettyWebServer.shutDownGracefully(GracefulShutdownCallback) 或 UndertowWebServer.shutDownGracefully(GracefulShutdownCallback) 的 API 文档。shutDownGracefully |
Jetty、Reactor Netty 和 Tomcat 将停止在网络层接受新请求。 Undertow 将接受新连接,但会立即响应服务不可用 (503) 响应。
禁用正常关闭
要禁用正常关闭,请配置该属性,如以下示例所示:server.shutdown
-
Properties
-
YAML
server.shutdown=immediate
server:
shutdown: "immediate"