如何在Spring Boot的application.yml中配置DefaultShutdownStrategy实现优雅停机
Spring Boot + Camel 优雅停机配置指引
首先明确:DefaultShutdownStrategy 是 Camel 默认的停机策略,不需要额外启用,你只需要通过配置调整它的行为参数即可。以下是在 application.yml 中配置该策略的具体属性,以及配合 Spring Boot 实现完整优雅停机的方案:
1. Camel DefaultShutdownStrategy 核心配置
在现有 camel 配置节点下添加以下参数:
camel: # 保留你原有配置... component: servlet: servlet-name: camelServlet${SERVER_PORT:9000} springboot: name: pilot-manager-service main-run-controller: true routes-include-pattern: classpath:routes/**/*.xml,classpath:route-templates/*.xml # 新增停机策略配置 context: shutdown: # 全局停机超时时间(毫秒),默认30000(30秒),可根据业务调整 timeout: 60000 # 强制停机超时时间(超时后强制终止剩余未完成任务,毫秒),默认10000(10秒) force-shutdown-timeout: 15000 # 停机过程日志级别,可选TRACE/DEBUG/INFO/WARN/ERROR shutdown-logging-level: INFO # 是否按路由启动顺序逆序停机,默认true(建议保持) reverse-shutdown-order: true # 停机期间是否允许接收新请求,默认false(禁止新请求流入) allow-new-work: false
2. Spring Boot 层面优雅停机配置
为了让整个应用(包括Camel)实现完整的优雅停机,还需要配置Spring Boot自身的停机参数:
server: # 启用Spring Boot优雅停机模式,可选graceful/immediate shutdown: graceful spring: lifecycle: # 每个停机阶段的超时时间(毫秒),需大于等于Camel的timeout配置 timeout-per-shutdown-phase: 70000
3. 额外实现建议
- 路由优化:确保路由中的处理器能响应中断信号,避免执行无法中断的阻塞操作;如果使用事务,要保证事务能正常提交/回滚后再结束。
- 测试验证:启动应用后,发送
TERM信号(Linux用kill <进程ID>,Windows通过任务管理器结束进程),观察日志确认正在执行的任务完成后再退出。 - 自定义逻辑:如果需要复杂停机逻辑,可实现
CamelContextConfiguration接口,手动配置DefaultShutdownStrategy,比如添加停机钩子、自定义任务中断规则等。
内容的提问来源于stack exchange,提问作者Enthu Leo
相关产品推荐
相关产品推荐

