以前SpringBoot 项目实现优雅停机相对复杂,都是自定义实现,写了一堆的代码。今天发现了一个Spring Boot优雅停机的方案,只需要3行配置代码即可实现,真的非常优雅,亲测可用。
这个方案是基于Spring Boot Actuator实现的,因此首先引入 Actuator Jar包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
接下来就是核心的3行代码配置,Application.properties 增加如下内容:
management.endpoint.shutdown.enabled=true
management.endpoints.web.exposure.include=*
server.shutdown=graceful
编写测试代码,如下代码运行完成需要1分多钟:
@GetMapping(value = "/getData")
public void getData() {
for (int i=0; i<10000000; i++) {
System.out.println(i);
}
}
调用此接口:
curl -X GET localhost:8080/getData
接着立刻调用优雅停机接口:
curl -X POST localhost:8080/actuator/shutdown
可以看到服务并没有立刻停止,而是等待 getData 方法运行完成后才停止。
特别说明:
此次测试Spring boot 版本为:2.7.11