Feign 注入失败之坑

今天碰到一个很坑的问题,feign 注入失败。

错误信息:

Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
12-18 15:29:57.654 ERROR [o.s.b.diagnostics.LoggingFailureAnalysisReporter] -

***************************
APPLICATION FAILED TO START
***************************

Description:

Field messageFeign in com.pance.scheduler.mdm.dataCenterTask.DataCenter required a bean of type 'com.pance.common.feign.MessageFeign' 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.pance.common.feign.MessageFeign' in your configuration.

很简单的一个报错信息,

直接看Application ,发现以及包含注解 @EnableFeignClients,以及 @ComponentScan("com.pance"),并且feign 也包含在 com.pance目录下。

查了良久,

终于在最崩溃的时候,发现了一个细节的坑,feign 时在另外的common 包中引入的,虽然@ComponentScan("com.pance") 指定了扫描路径包含了feign 的路径,但是feign如果不是在相同的module 下,就必须加上 自己的扫描范围,例如

@EnableFeignClients(basePackages = "com.pance")

加上之后,问题解决。

1

2

3

4

5

6

7

8

9

10

@EnableFeignClients(basePackages = "com.pance")

@ComponentScan("com.pance")

@EnableScheduling

@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})

public class SchedulerApplication {

    public static void main(String[] args) {

        /*only start one application*/

        SpringApplication.run(SchedulerApplication.class, args);

    }

}

  

=====================================

发现网上说都是要配置@EnableFeignClients,以及引入jar 包,但是这个basePackage 这个值很少有说明。就写一下自己踩坑的惨痛经历。

Feign的jar包如果和服务在同一个工程下,需要指定basePackage

### 解决 Feign Client 注入失败 当遇到 `FeignClient` 不在 `SpringBootApplication` 的扫描范围内,这可能导致 `@Autowired` 实际注入失败的情况。为了确保所有的 `FeignClient` 能够被正确识别和使用,可以采取以下措施: #### 修改启动类配置 如果 `FeignClient` 接口位于不同的模块或子下,则需要调整应用程序的主类位置,使其处于最顶层父级目录中,这样能够覆盖所有可能定义了 `FeignClient` 的子。 另一种方式是在应用入口处通过指定组件扫描路径来扩大查找范围,例如: ```java @SpringBootApplication(scanBasePackages={"com.example.feignclients", "其他名"}) public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } } ``` #### 使用 @EnableFeignClients 注解自定义属性 除了默认行为外,还可以利用 `@EnableFeignClients` 提供的一些参数来自定义扫描逻辑。比如设置 basePackageClasses 或 defaultConfiguration 属性指向特定的目标类,以便更好地控制哪些地方应该含进来作为候选者进行实例化[^2]。 #### 验证项目结构合理性 确认项目的整体架构设计合理,特别是对于大型微服务架构而言,合理的分层与划分有助于减少此类问题的发生概率。通常建议将各个独立的服务按照功能领域拆分成多个小型仓库管理,并保持清晰一致的技术栈版本号同步更新策略。 #### 添加日志调试信息辅助排查 适当增加一些关于依赖注入过程的日志输出可以帮助快速定位具体原因所在。可以在 application.properties 文件里加入如下配置项开启更多细节级别的记录: ```properties logging.level.org.springframework.beans.factory=DEBUG logging.level.com.netflix.loadbalancer=DEBUG ``` 以上方法综合运用往往能有效解决大部分由于路径引起的自动装配难题。当然也存在少数极端情况下可能是第三方库本身存在问题或者是网络环境不稳定等因素干扰所致,此时则需进一步深入分析具体情况再做定夺。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值