Spring中CustomCircuitBreakerFactory Bean重复定义问题及解决
解决Spring中CustomCircuitBreakerFactory Bean重复定义问题
问题场景
- 自定义
CustomCircuitBreakerFactory类,为两个API配置独立断路器,类内定义了两个生成断路器实例的Bean,且给该类添加了@Component注解 - 同时在
ApiApplication启动类中,手动定义了CustomCircuitBreakerFactory类型的Bean - 本地测试运行正常,但执行
mvn clean install构建时,抛出Bean重复定义错误 - 尝试开启
spring.main.allow-bean-definition-overriding=true配置,问题仍未解决
问题原因
CustomCircuitBreakerFactory上的@Component会触发Spring组件扫描,自动将该类注册为Bean;加上启动类中手动定义的同类型Bean,容器中出现重复的Bean定义- 测试环境与打包构建环境的Bean注册逻辑存在差异,导致测试阶段未触发冲突,但构建时暴露问题
allow-bean-definition-overriding仅支持同名Bean的覆盖逻辑,若两个Bean名称不同但类型一致,且代码中存在按类型注入的场景,依然会触发Bean歧义错误
解决方法
直接移除CustomCircuitBreakerFactory类上的@Component注解,仅保留ApiApplication中手动配置的CustomCircuitBreakerFactory Bean。这样Spring不会自动扫描注册该类,仅通过手动定义的实例生成所需的断路器Bean,彻底避免重复定义问题。
内容的提问来源于stack exchange,提问作者Misa
相关产品推荐
相关产品推荐

