Spring Boot 3.0迁移中Camel ProducerTemplate注入及路由配置问题
解决方案
1. 先解决Camel与Spring Boot 3.x的版本兼容问题
Camel 3.15.0不支持Spring Boot 3.0,Spring Boot 3.x要求Camel最低版本为3.20.0(官方适配基线)。低版本的Camel starter无法自动配置ProducerTemplate等核心Bean,这就是你注入时提示找不到Bean的根本原因。
- 直接升级
camel-spring-boot-starter和camel-rabbitmq-starter到3.20.0及以上(推荐选和Spring Boot 3.0匹配的最新兼容版,比如3.20.2) - 不要替换成
camel-core,保留starter依赖即可让Spring Boot自动完成CamelContext、ProducerTemplate的配置,无需手动定义Bean
2. 修复bean://updateJdbc端点找不到Bean的问题
如果一定要自定义CamelContext配置(不推荐,starter已做最优封装),必须确保Spring容器中的Bean能被Camel注册表识别:
- 使用
SpringCamelContext而非普通DefaultCamelContext,它会自动关联Spring ApplicationContext,无需手动注册Bean,只要Spring中存在名为updateJdbc的@Service/@ComponentBean,Camel就能通过bean://updateJdbc找到它 - 若坚持手动配置,可在配置类中手动把Spring Bean绑定到Camel注册表:
@Bean public CamelContext camelContext(ApplicationContext applicationContext) throws Exception { SpringCamelContext context = new SpringCamelContext(applicationContext); // 绑定Spring中的updateJdbc Bean到Camel注册表 context.getRegistry().bind("updateJdbc", applicationContext.getBean("updateJdbc")); context.start(); return context; }
3. 验证ProducerTemplate注入的正确写法
你在@Service且继承RouteBuilder的类中用构造方法注入ProducerTemplate的写法本身没问题,只要依赖版本正确,starter自动生成的producerTemplate Bean会被正常注入:
@Service public class BizRoute extends RouteBuilder { private final ProducerTemplate producerTemplate; public BizRoute(ProducerTemplate producerTemplate) { this.producerTemplate = producerTemplate; } @Override public void configure() throws Exception { // 路由逻辑配置 } }
总结
优先升级Camel starter版本到兼容Spring Boot 3.x的版本,这是解决所有问题的核心。自定义CamelContext会增加配置复杂度,尽量依赖starter的自动配置,避免手动处理Bean注册的麻烦。
内容的提问来源于stack exchange,提问作者T.Rex
相关产品推荐
相关产品推荐

