OpenFeign 接口调用问题及解决方案
问题描述
如果在同一个工程中出现两个 OpenFeign 接口使用一样的服务名称会报以下错误:
Description:
The bean 'optimization-user.FeignClientSpecification', defined in null, could not be registered. A bean with that name has already been defined in null and overriding is disabled.
Action:
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
原因分析
原因是 FeignCilent 注解注入到容器中底层源码默认首先使用的是属性 value 的值作为 bean 的名称注入到Spring容器中,两个相同名字注入到 SpringIoC 容器中导致重复注入。
解决方案
方式一
在配置文件中加入下面的配置,作用是允许出现beanName一样的BeanDefinition,可以解决一种报错问题。
spring.main.allow-bean-definition-overriding=true
方式二
每一个 Client 手动指定不同的 ContextId
通过阅读源码可以知道,如果配置了contextId 这个属性,就会采用 contextId 作为 bean 的名称注入进容器中,如果没有配置就会去找value 然后是 name,最后是 serviceId(此属性已经废弃)
@FeignClient(value = "stock-service",contextId = "StockClientFeignEx")
另外在注册 FeignClient 中,这个属性还会作为 Client 别名的一部分,如果配置了 qualifier,会有限使用 qualifier 作为别名。
分类:
SpringCloud
标签:
OpenFeign
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)