Spring Boot升级时spring.sleuth.baggage-keys bean重复定义报错如何解决
同名Bean冲突解决方案(无需开启bean覆盖)
根因说明
名为'spring.sleuth.baggage-keys'的bean已在类路径资源org/springframework/cloud/sleuth/autoconfig/TraceBaggageConfiguration.class中定义,org/springframework/cloud/sleuth/autoconfig/brave/BraveBaggageConfiguration.class中定义的同名bean无法注册,且当前bean覆盖功能已禁用
该报错是Spring Cloud Sleuth 2.2.x版本内置双跟踪实现导致的冲突:版本默认同时支持旧版原生Sleuth跟踪、Brave跟踪两套实现,两套实现的自动配置类都会注册名为spring.sleuth.baggage-keys的bean,Spring Boot 2.4.x默认禁用bean覆盖,因此触发启动失败。
修复步骤
按优先级选择以下方案即可,不需要修改核心依赖版本也可解决:
- 方案一(修改配置即可,兼容性最好):在项目的application.properties或application.yml配置文件中,显式指定使用Brave作为唯一跟踪实现(Sleuth 2.x官方推荐默认实现),配置内容如下:
添加配置后会自动屏蔽旧版原生Sleuth的spring.sleuth.tracer.mode=BRAVETraceBaggageConfiguration配置类加载,从根源避免同名bean冲突。 - 方案二(适配Spring Boot 2.4.x官方兼容规范):升级Spring Cloud依赖管理BOM版本到2020.0.6.RELEASE(Spring Boot 2.4.x对应官方适配的Spring Cloud版本),该版本内置的Sleuth 3.0.x已经完全移除了旧版原生跟踪实现,不会再出现两套配置类冲突的问题,同时完全兼容你当前的Spring Boot 2.4.x部署环境。
- 补充校验:如果执行以上操作后仍有报错,检查项目中是否存在手动导入
TraceBaggageConfiguration的自定义配置代码,直接删除该导入逻辑即可。
内容的提问来源于stack exchange,提问作者Josh Austin
相关产品推荐
相关产品推荐

