以前SpringBoot 項(xiàng)目實(shí)現(xiàn)優(yōu)雅停機(jī)相對復(fù)雜,都是自定義實(shí)現(xiàn),寫了一堆的代碼。今天發(fā)現(xiàn)了一個(gè)Spring Boot優(yōu)雅停機(jī)的方案,只需要3行配置代碼即可實(shí)現(xiàn),真的非常優(yōu)雅,親測可用。
這個(gè)方案是基于Spring Boot Actuator實(shí)現(xiàn)的,因此首先引入 Actuator Jar包:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
接下來就是核心的3行代碼配置,Application.properties 增加如下內(nèi)容:
management.endpoint.shutdown.enabled=true
management.endpoints.web.exposure.include=*
server.shutdown=graceful
編寫測試代碼,如下代碼運(yùn)行完成需要1分多鐘:
@GetMapping(value = "/getData")
public void getData() {
for (int i=0; i<10000000; i++) {
System.out.println(i);
}
}
調(diào)用此接口:
curl -X GET localhost:8080/getData
接著立刻調(diào)用優(yōu)雅停機(jī)接口:
curl -X POST localhost:8080/actuator/shutdown
可以看到服務(wù)并沒有立刻停止,而是等待 getData 方法運(yùn)行完成后才停止。

特別說明:
此次測試Spring boot 版本為:2.7.11