目前SpringBoot内置的四个嵌入式Web服务器(Jetty,Reactor Netty,Tomcat和Undertow)以及响应式和基于Servlet的Web应用程序都支持优雅关机。
配置宽限期后,在关闭时,Web服务器将不再允许新请求(但是并不会立刻返回失败),并且将等待宽限期以使活动请求完成。
Demo尝试
1. SpringBoot版本大于2.3.0.RELEASE
2. 在application.properties
添加配置
## 开启优雅停机, 如果不配置是默认IMMEDIATE, 立即停机
server.shutdown=graceful
## 优雅停机宽限期时间
spring.lifecycle.timeout-per-shutdown-phase=60s
3.编写接口代码测试
@RestController @Slf4j public class TestController { @SneakyThrows @GetMapping(value = "/sleep/{num}", produces = "application/json") public String sleep(@PathVariable int num) { log.info("模拟业务处理{}秒", num); Long serverTime = System.currentTimeMillis(); Thread.sleep(num * 1000L); log.info("业务处理完成,耗时{}秒", num); return "hello world"; } }
4.执行测试方法
未超过停机宽限时间:
超过停机宽限时间:
关于如何优雅停机
- kill -15 pid
- 单击IDEA的Stop