以前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