翻译官网
springboot内置四种web server(Jetty, Reactor Netty, Tomcat, and Undertow) 以及响应式和基于servlet的web应用全部支持优雅的shutdown,作为停止application上下文的一部分,并且在停止SmartLifecycle beans的早期阶段停止。停止进程会有一个超时时间,在这段时间内已经存在的请求将会被允许完成,但是新请求是不允许的。新请求不被允许的确切方式取决于web server的用法。
tomcat9.0.33及以后得版本支持graceful shutdown
配置graceful shutdown,通过server.shutdown,配置如下:
- yaml
server:
shutdown: "graceful"
- properties
server.shutdown=graceful
配置超时时间,通过spring.lifecycle.timeout-per-shutdown-phase属性,配置如下:
- yaml
spring:
lifecycle:
timeout-per-shutdown-phase: "20s"
- properties
spring.lifecycle.timeout-per-shutdown-phase=20s
如果你的IDE没有发送正确的SIGTERM信号,graceful shutdown可能没法正常使用,请参考IDE文档了解更多详细信息。
实践
通常我们使用kill -9 pid来结束java进程,但是想要graceful shutdown应用时,就不能再暴力的使用kill -9来结束进程了,除了在配置文件中打开配置还需要使用kill -2 pid来给应用发送中断信号。
拓展
linux中kill的信号量
kill -9 强制中断进程
kill -2 类似于ctrl+c,等程序执行完毕,结束进程