You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 18:05:04