要优雅关闭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+ 原生支持优雅停机,只需在 red”>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,它会立即终止进程,无法执行清理逻辑。应使用:
立即学习“Java免费学习笔记(深入)”;
- kill -15(即 SIGTERM):通知应用正常关闭,Spring 会触发 shutdown hook
- 通过 actuator/shutdown 端点(需启用)发送 POST 请求关闭(生产环境慎用)
启用 shutdown 端点示例:
management:
endpoint:
shutdown:
enabled: true
endpoints:
web:
exposure:
include: shutdown
自定义资源清理逻辑
如果有数据库连接池、线程池、消息监听器等资源,可在 Bean 中实现清理逻辑:
示例:
@Component
public class CustomCleanup {
@PreDestroy
public void cleanup() {
System.out.println(“正在释放资源…”);
// 关闭线程池、断开长连接等
}
}
基本上就这些。只要配置了 graceful shutdown 并用 kill 发送 SIGTERM,Spring Boot 会自动等待活跃请求结束,再执行销毁逻辑,实现真正优雅关闭。


