欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

@feignclient名字冲突的解决方案

程序员文章站 2022-06-16 11:43:31
目录@feignclient同一个name,多个配置类@feignclient名字冲突在启动springcloud项目是遇到consider renaming one of the beans or...

@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,这样使用这个属性也是可以的,有这个例程。

@feignclient名字冲突的解决方案

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");
    }
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。