Spring Boot 优雅停机
Spring Boot Actuator 大约 1442 字添加配置
默认是immediate
立即停止。
server:
shutdown: graceful
设置优雅停机超时时间,默认是30
秒。
spring:
lifecycle:
timeout-per-shutdown-phase: 1m
停机方式
Linux kill 命令
使用kill -9
无法触发优雅停机。
kill -15 <pid>
Spring Actuator
添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
发送停机请求
curl -X POST --location "http://localhost:8080/actuator/shutdown" \
-H "Accept: application/vnd.spring-boot.actuator.v3+json"
停机回调
Java
层面的Runtime
回调和Spring
层面的@PreDestroy
。
@SpringBootApplication
public class ShutdownApplication {
public static void main(String[] args) {
SpringApplication.run(ShutdownApplication.class, args);
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
System.out.println(LocalDateTime.now() + " runtime shutdown hook...");
}));
}
@PreDestroy
public void preDestroy() throws InterruptedException {
System.out.println(LocalDateTime.now() + " pre destroy shutdown hook start...");
Thread.sleep(40000);
System.out.println(LocalDateTime.now() + " pre destroy shutdown hook end...");
}
}
备注
测试中发现(基于Spring Boot2.7.3
):如果Runtime
或@PreDestroy
中的处理时间大于了spring.lifecycle.timeout-per-shutdown-phase
配置的值,并不会立即停机,而是知道程序回调中的逻辑运行完成。
更多
阅读 871 · 发布于 2022-09-26
————        END        ————
Give me a Star, Thanks:)
https://github.com/fendoudebb扫描下方二维码关注公众号和小程序↓↓↓

昵称:
随便看看
换一批
-
Rust 标准库 API 环境变量参数 vars阅读 383
-
Nginx 配置静态文件 404(root 与 alias 区别)阅读 5777
-
MyBatis Cause: java.lang.IndexOutOfBoundsException: Index: 5, Size: 5阅读 6591
-
JMeter 使用 Critical Section Controller 按顺序执行接口阅读 2315
-
数据结构:单向链表阅读 1490
-
Docker 部署 Excalidraw阅读 2432
-
MySQL 内存占用过高阅读 2538
-
Java jcmd 代替 jmap 导出堆内存快照阅读 2358
-
k3s 部署简化版 Kubernetes阅读 1417
-
Spring Boot JPA 使用 @IdClass 添加联合主键阅读 463