除开启Bean覆盖外,如何解决Spring Boot FeignClientSpecification重复Bean问题?
精准控制Feign Client扫描范围
父项目和子项目分别指定各自的Feign Client扫描包,避免交叉扫描。比如父项目用@EnableFeignClients(basePackages = "com.parent.feign"),子项目用@EnableFeignClients(basePackages = "com.child.feign"),让各自只扫描自己的Feign Client接口,不会重复生成FeignClientSpecification Bean。要是子项目的Feign Client是给父项目调用的,也可以让父项目统一扫描,但要明确排除子项目的重复包路径。给Feign Client设置唯一contextId
在每个Feign Client接口上添加contextId属性,比如:@FeignClient(name = "child-service", contextId = "child-service-unique-client") public interface ChildServiceFeignClient { // 接口方法 }FeignClientSpecification的命名规则是
{contextId}.FeignClientSpecification(没指定contextId时用name),设置唯一的contextId就能保证Bean名称不重复。统一管理Feign依赖版本
检查父子项目的spring-cloud-starter-openfeign依赖版本,确保两者完全一致。建议在父项目的pom.xml里统一声明Feign的版本,子项目直接继承,不单独指定版本,减少因版本差异导致的Bean定义逻辑冲突。禁用子项目的Feign自动配置
如果子项目只是提供Feign Client接口,不需要自己初始化Feign相关配置,可以在子项目的application.yml里添加:spring: autoconfigure: exclude: org.springframework.cloud.openfeign.FeignAutoConfiguration这样子项目不会生成FeignClientSpecification Bean,仅由父项目负责初始化Feign相关组件。
内容的提问来源于stack exchange,提问作者Peter Penzov

