@feignclient名字沖突的解決方案

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

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: