今天项目启动,突然发现feign启动报错,失败了,之前都没有发生。
报错信息
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springblade.demo.feign.BlogClient': FactoryBean threw exception on object creation; nested exception is java.lang.IllegalStateException: No fallback instance of type class org.springblade.demo.feign.BlogClientFallback found for feign client blade-demo
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:178)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101)
at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1674)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1248)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:257)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1478)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1435)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1218)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1175)
at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:857)
at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:760)
... 19 common frames omitted
Caused by: java.lang.IllegalStateException: No fallback instance of type class org.springblade.demo.feign.BlogClientFallback found for feign client blade-demo
at org.springframework.cloud.openfeign.BladeHystrixTargeter.getFromContext(BladeHystrixTargeter.java:83)
at org.springframework.cloud.openfeign.BladeHystrixTargeter.targetWithFallback(BladeHystrixTargeter.java:75)
at org.springframework.cloud.openfeign.BladeHystrixTargeter.target(BladeHystrixTargeter.java:51)
at org.springframework.cloud.openfeign.FeignClientFactoryBean.loadBalance(FeignClientFactoryBean.java:238)
at org.springframework.cloud.openfeign.FeignClientFactoryBean.getTarget(FeignClientFactoryBean.java:267)
at org.springframework.cloud.openfeign.FeignClientFactoryBean.getObject(FeignClientFactoryBean.java:247)
at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:171)
... 31 common frames omitted
查看代码里面,fallback是存在的。
查了网上的帖子,都是说没有把fallback加上@component。
代码里面也是带着的。
所以不是这个问题。后面想起来,springboot启动时候扫描的包是在启动类平级和以下的,由于feign客户端和fallback在微服务中一般都是抽出来放在api模块,导致扫描不到fallback类。所以在启动类的地方,要手动添加扫描包的位置。
加上包扫描的位置之后,启动就成功了
现在还有一个问题,就是这个报错是突然发生的,也就是说之前是没有问题的,代码也没有变动,不知有没有大佬给我解释一下,为什么之前不加这个也可以成功。
Java小白修炼手册