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 作为别名。

posted @   Binge-和时间做朋友  阅读(234)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示