咱们首先来看一下报错信息java
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 的配置信息spring
@SpringBootApplication( scanBasePackages = "com.ysc", exclude = { DataSourceAutoConfiguration.class, ThymeleafAutoConfiguration.class }) @EnableFeignClients public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
从表面上看配置并无什么问题,那么咱们来分析一下问题的具体缘由。ide
注解 @EnableFeignClients 与 @ComponentScan 有冲突,两种注解都会搜索注入指定目录中的 bean 。@EnableFeignClients 引入了 FeignClientsRegistrar 类,实现了 Spring 的bean 资源的加载。ui
FeignClientsRegistrar中registerFeignClients方法获取了@EnableFeignClients注解中的basepackage 属性值,并进行注入。若是两种注解都使用时,其中@EnableFeignClients会覆盖 @ComponentScan 中指定的目录,从而恢复到默认目录。code
如何解决这个问题:ip
一、能够将 FeignClient 这个 bean 放在和 Application 启动类同级目录资源
二、能够在 @EnableFeignClients中经过 clients 属性指定 bean 目录io
@EnableFeignClients(clients = { BusinessFeignClient.class })