Spring Cloud 使用 FeignClient 啟動報錯


我們首先來看一下報錯信息

Description:

Field businessFeignClient in com.ysc.service.BusinessConfigService required a bean of type 'com.ysc.feignclient.BusinessFeignClient' that could not be found.

The injection point has the following annotations:
	- @org.springframework.beans.factory.annotation.Autowired(required=true)


Action:

Consider defining a bean of type 'com.ysc.feignclient.BusinessFeignClient' in your configuration.

再來看一下 Feign 的配置信息

@SpringBootApplication(
        scanBasePackages = "com.ysc",
        exclude = {
                DataSourceAutoConfiguration.class,
                ThymeleafAutoConfiguration.class
        })
@EnableFeignClients
public class Application {
	
	public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

從表面上看配置並沒有什么問題,那么我們來分析一下問題的具體原因。

注解 @EnableFeignClients 與 @ComponentScan 有沖突,兩種注解都會搜索注入指定目錄中的 bean 。@EnableFeignClients 引入了 FeignClientsRegistrar 類,實現了 Spring 的bean 資源的加載。

FeignClientsRegistrar中registerFeignClients方法獲取了@EnableFeignClients注解中的basepackage 屬性值,並進行注入。如果兩種注解都使用時,其中@EnableFeignClients會覆蓋 @ComponentScan 中指定的目錄,從而恢復到默認目錄。

如何解決這個問題:

1、可以將 FeignClient 這個 bean 放在和 Application 啟動類同級目錄

2、可以在 @EnableFeignClients中通過 clients 屬性指定 bean 目錄

@EnableFeignClients(clients = {
        BusinessFeignClient.class
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM