参考
- https://www.jianshu.com/p/199e419c025e
- https://blog.csdn.net/u014643282/article/details/116004816
- gpt
注意
- Spring Boot 还支持关闭事件监听,在监听事件内可以编写代码实现关闭前的清理工作。
环境
环境 | 版本 | 说明 |
---|---|---|
Windows | 10 | |
VS Code | 1.85.1 | |
Spring Boot Extension Pack | v0.2.1 | vscode插件 |
Extension Pack for Java | v0.25.15 | vscode插件 |
JDK | 11 | |
Spring Boot | 2.3.12.RELEASE |
正文
准备
Spring Boot 2.3 + 新增内置功能,无需添加依赖。
- 修改
application.properties
。
#开启优雅停机,默认是立即停机IMMEDIATE
server.shutdown=graceful
#缓冲器即最大等待时间
spring.lifecycle.timeout-per-shutdown-phase=20s
IndexController.java
测试。
package com.xiaqiuchu.demo.controller;
import org.springframework.web.bind.annotation.RestController;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Slf4j
@RestController
@RequestMapping("/")
public class IndexController {
@RequestMapping(value = "index", method=RequestMethod.GET)
public String index() throws InterruptedException {
log.info("收到新请求");
// 模拟业务耗时处理流程
Thread.sleep(15 * 1000L);
//
return "hello";
}
}
测试
- 运行项目,浏览器访问一次,然后 windows 下
Ctrl
+c
, linux 下执行kill -2
,再次访问。 - 测试得知,已存在的请求将会继续执行并正常返回(超出设置的等待时间则会强制结束),新请求会超时(不会进入控制器)。