好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

@feignclient名字冲突的解决方案

@ feignclient 名字 冲突

在启动springcloud项目是遇到

Consider renaming one of the beans or enabling overriding by setting spring.main.allow-bean-definition-overriding=true

这样一个异常

经过研究,解决方法如下

1、在配置文件中增加配置

?

1

spring.main.allow-bean-definition-overriding= true

2、在feignclient注解中加个字段,红色部分

?

1

@FeignClient (value = [provider-demo3-ribbon], path = [/dev], contextId=[tt1])

@FeignClient同一个name,多个配置类

我使用的spring-cloud-starter-openfeign的版本是2.0.0,然后使用@FeignClient的时候是不能一个name多个配置类的,后来也是从网络查找了各种网友的方法,反正就是歪门邪道的各种都有。但是还是官网给的方法比较靠谱。

解决方案

1、添加配置

?

1

spring.main.allow-bean-definition-overriding= true

2、这样允许同名的bean存在,但是不安全,不推荐。(来自网络,未测试)在openfeign高版本2.2.1中@FeignClient里面添加了新属性ContextId,这样使用这个属性也是可以的, 官网 有这个例程。

3、官网提供的另外一种就是手动创建Feign客户端,如下就是,( 官网 )

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

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

     }

}

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

原文链接:https://blog.csdn.net/a854517900/article/details/107387309

查看更多关于@feignclient名字冲突的解决方案的详细内容...

  阅读:28次