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

升级Spring Boot与Camel版本修复漏洞时遇CamelContext Bean注入错误

问题分析与解决方案

核心原因

Spring Boot 3.0.x 基于 Jakarta EE API,而你使用的 Camel 3.17.0 仍依赖旧的 Java EE(javax)API,两者依赖体系不兼容,导致 Spring 容器无法正确识别并注入 CamelContext 实例。另外,Camel 3.x 系列本身不支持 Spring Boot 3,官方适配 Spring Boot 3 的是 Camel 4.x 及以上版本。

解决方案

方案一:升级 Camel 到适配 Spring Boot 3 的版本

这是长期兼容的最优方案:

  • 将所有 Camel 相关依赖(包括 camel-core、camel-spring-boot-starter、camel-cxf)统一升级到 Camel 4.0.0+(推荐 4.0.2 或更高稳定版)。
  • 执行 mvn dependency:tree 检查依赖树,排除所有遗留的 javax 相关依赖,确保项目完全基于 Jakarta EE API。
  • 若代码中存在引用 javax 包的代码(如 javax.ws.rs、javax.annotation),替换为对应的 jakarta 包(jakarta.ws.rs、jakarta.annotation)。

方案二:降级 Spring Boot 到与 Camel 3.17.0 兼容的版本

如果暂时不想升级 Camel,可以选择此折中方案,同时也能修复 CVE-2023-20860:

  • 将 Spring Boot 版本降级到 2.7.10(该版本已修复 CVE-2023-20860,且与 Camel 3.17.0 完全兼容)。
  • 保持 Camel 3.17.0、snakeyaml 2.0 等依赖版本不变,无需额外调整代码。

代码层面的注入优化(可选)

无论选择哪种方案,若 @Autowired 注入仍有问题,可以尝试:

  • 实现 CamelContextAware 接口,Camel 会自动将上下文注入到实现类中:
public class SetTokenInHeaderProcessor implements Processor, CamelContextAware {
    private CamelContext ctx;

    @Override
    public void process(Exchange exchange) throws Exception {
        // 使用 ctx 处理逻辑
    }

    @Override
    public void setCamelContext(CamelContext camelContext) {
        this.ctx = camelContext;
    }

    @Override
    public CamelContext getCamelContext() {
        return ctx;
    }
}
  • 或者使用 @Inject 替代 @Autowired,部分场景下能解决注入识别问题。

内容的提问来源于stack exchange,提问作者bhaskar guguloth

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:52:46