@feignclient名字冲突的解决方案
短信预约 -IT技能 免费直播动态提醒
@feignclient名字冲突
在启动springcloud项目是遇到
Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true
这样一个异常
经过研究,解决方法如下
1、在配置文件中增加配置
spring.main.allow-bean-definition-overriding=true
2、在feignclient注解中加个字段,红色部分
@FeignClient(value = “provider-demo3-ribbon”, path = “/dev”, contextId=“tt1”)
@FeignClient同一个name,多个配置类
我使用的spring-cloud-starter-openfeign的版本是2.0.0,然后使用@FeignClient的时候是不能一个name多个配置类的,后来也是从网络查找了各种网友的方法,反正就是歪门邪道的各种都有。但是还是官网给的方法比较靠谱。
解决方案
1、添加配置
spring.main.allow-bean-definition-overriding=true
2、这样允许同名的bean存在,但是不安全,不推荐。(来自网络,未测试)在openfeign高版本2.2.1中@FeignClient里面添加了新属性ContextId,这样使用这个属性也是可以的,官网有这个例程。
3、官网提供的另外一种就是手动创建Feign客户端,如下就是,(官网)
@Import(FeignClientsConfiguration.class)
class FooController {
private FooClient fooClient;
private FooClient adminClient;
@Autowired
public FooController(Decoder decoder, Encoder encoder, Client client, Contract contract) {
this.fooClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(new BasicAuthRequestInterceptor("user", "user"))
.target(FooClient.class, "https://PROD-SVC");
this.adminClient = Feign.builder().client(client)
.encoder(encoder)
.decoder(decoder)
.contract(contract)
.requestInterceptor(new BasicAuthRequestInterceptor("admin", "admin"))
.target(FooClient.class, "https://PROD-SVC");
}
}
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341