咨询Spring Boot应用优雅停机前需清理及重点关注的资源清单
Spring Boot 优雅停机需清理/关注的资源清单
- 数据库连接池:确保所有活跃连接被正确关闭,避免数据库端残留无效连接。Spring Boot默认的HikariCP会在关闭时自动清理,但自定义连接池配置时,要确认
shutdown()方法被触发执行。 - 线程池与异步任务:
- 根据业务需求选择等待当前异步任务完成(调用
ThreadPoolTaskExecutor.shutdown())或强制终止(调用shutdownNow()),避免任务执行到一半中断引发数据不一致。 - 清空线程池中的待执行任务队列,释放占用的线程资源。
- 根据业务需求选择等待当前异步任务完成(调用
- 消息队列消费者:
- 停止从MQ(如RabbitMQ、Kafka)拉取新消息,等待正在处理的消息完成后再关闭消费者,防止消息丢失或重复消费。
- Kafka需提交最后一次消费的偏移量,RabbitMQ要确认消息ACK操作完成。
- 文件资源:
- 关闭所有打开的文件输入/输出流,释放操作系统文件句柄,避免资源泄漏。
- 按需清理或归档应用运行中生成的临时文件(如缓存文件、临时报表)。
- 网络长连接:
- 主动关闭WebSocket、HTTP长连接,通知客户端服务即将停机,避免客户端收到异常响应。
- 关闭对外调用的客户端连接池(如RestTemplate、Feign的连接池),释放网络资源。
- 定时任务:
- 停止所有定时任务(如Spring Task、Quartz),防止停机过程中任务触发导致业务逻辑混乱。
- Quartz需调用
Scheduler.shutdown()停止调度器,确保任务调度完全终止。
- 缓存资源:
- 本地缓存(如Caffeine、Guava Cache)可按需将数据持久化后清理实例;分布式缓存(如Redis)需关闭客户端连接池,确保无未完成的命令请求。
- 自定义与第三方资源:
- 关闭第三方服务(如短信网关、支付接口)的客户端连接,停止或确认正在进行的请求完成。
- 释放自定义的全局锁、共享内存等资源,避免影响其他服务或后续重启。
- Spring容器销毁:
- 确保实现
DisposableBean接口或标注@PreDestroy注解的Bean执行销毁逻辑,清理自身持有的资源。 - 触发Spring ApplicationContext关闭,完成全容器Bean的销毁流程。
- 确保实现
内容的提问来源于stack exchange,提问作者Dishant Patel
相关产品推荐
相关产品推荐

