8,3 Graceful Shutdown(优雅停机)
优雅停机支持所有四种内嵌式web server,Jetty,Reactor Netty,Tomcat 和 Undertow。对Reactive和Servlet两种模式也都支持。优雅停机发生在关闭application context的时候,在停止SmartLifecyclebean的最早阶段。优雅停机允许现存的请求继续完成但不会接收新的请求。具体以哪种方式实现不再接收新的请求因不同的web server而异。Jerry,Reactor Netty,Tomcat还在network layer停止接收请求,Undertow还会继续接收请求但是会立马返回503(service unavailable)。
Note
如果使用的是Tomcat,那么优雅停机需要Tomcat9.0.33+。
为了启用优雅停机,配置server.shutdown配置项,如下所示
server.shutdown=graceful
为了配置优雅停机的超时时间,配置spring.lifecycle.timeout-per-shutdown-phase配置项,如下所示
spring.lifecycle.timeout-per-shutdown-phase=20s
Important
如果你所使用的IDE没有正确的SIGTERM信号,那么在IDE中可能不能正常地使用优雅停机。