要优雅关闭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,它会立即终止进程,无法执行清理逻辑。应使用:
立即学习“Java免费学习笔记(深入)”;
AppMall应用商店
AI应用商店,提供即时交付、按需付费的人工智能应用服务
56 查看详情
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(较少需要手动做)
示例:
@Component
public class CustomCleanup {
@PreDestroy
public void cleanup() {
System.out.println(“正在释放资源…”);
// 关闭线程池、断开长连接等
}
}
基本上就这些。只要配置了 graceful shutdown 并用 kill 发送 SIGTERM,Spring Boot 会自动等待活跃请求结束,再执行销毁逻辑,实现真正优雅关闭。
以上就是java后端开发怎么优雅地关闭Spring Boot应用?的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/291012.html
微信扫一扫
支付宝扫一扫