优雅关闭Spring Boot应用的几种方法
要优雅关闭SpringBoot应用,需配置server.shutdown=graceful和spring.lifecycle.timeout-per-shutdown-phase=30s;2.使用kill-15或actuator/shutdown端点触发关闭,避免kill-9;3.通过@PreDestroy或DisposableBean实现资源清理逻辑,确保请求处理完成、资源释放后进程退出。
要优雅关闭Spring Boot应用,需配置server.shutdown=graceful和spring.lifecycle.timeout-per-shutdown-phase=30s;2. 使用kill -15或actuator/shutdown端点触发关闭,避免kill -9;3. 通过@PreDestroy或DisposableBean实现资源清理逻辑,确保请求处理完成、资源释放后进程退出。

关闭Spring Boot应用不能直接杀进程,否则可能导致资源未释放、数据丢失或请求处理不完整。要优雅地关闭,核心是让应用在接收到关闭信号后,先停止接收新请求,完成正在处理的任务,再释放资源并退出。
启用优雅停机配置
Spring Boot 2.3+ 原生支持优雅停机,只需在 application.yml 中开启:
- server.shutdown=graceful:启用优雅关闭模式
- spring.lifecycle.timeout-per-shutdown-phase=30s:设置最大等待时间,超过则强制退出
例如:
server:port: 8080
shutdown: graceful
spring:
lifecycle:
timeout-per-shutdown-phase: 30s
使用标准方式触发关闭
不要用 kill -9,它会立即终止进程,无法执行清理逻辑。应使用:
- kill -15(即 SIGTERM):通知应用正常关闭,Spring 会触发 shutdown hook
- 通过 actuator/shutdown 端点(需启用)发送 POST 请求关闭(生产环境慎用)
启用 shutdown 端点示例:
management:endpoint:
shutdown:
enabled: true
endpoints:
web:
exposure:
include: shutdown
自定义资源清理逻辑
如果有数据库连接池、线程池、消息监听器等资源,可在 Bean 中实现清理逻辑:
- 实现 DisposableBean 接口,重写 destroy() 方法
- 使用 @PreDestroy 注解标记清理方法
- 注册 JVM Shutdown Hook(较少需要手动做)
示例:
@Componentpublic class CustomCleanup {
@PreDestroy
public void cleanup() {
System.out.println("正在释放资源...");
// 关闭线程池、断开长连接等
}
}
基本上就这些。只要配置了 graceful shutdown 并用 kill 发送 SIGTERM,Spring Boot 会自动等待活跃请求结束,再执行销毁逻辑,实现真正优雅关闭。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















