运行Spring Boot应用抛出UnsatisfiedDependencyException该如何解决
问题根因
从异常栈最底层的java.lang.IllegalArgumentException可以直接定位:kafkaConsumerConfig类中通过@Value注入了${ft.poll.sleep.duration}配置项,但Spring容器在加载时未找到对应的属性值,导致Bean创建失败,进而引发上层依赖的mdCalcEngineService初始化异常。
排查步骤
- 检查配置文件配置项是否存在
打开项目resources目录下的application.yml/application.properties主配置文件,以及对应激活环境的配置文件,确认是否存在ft.poll.sleep.duration配置:- yml格式注意层级缩进是否正确,不能用tab缩进、不能有多余空格
- 配置名拼写和注入时的占位符完全一致,无大小写、拼写错误
- 检查配置文件是否被正常加载
确认项目编译后target/classes目录下存在对应的配置文件:如果pom.xml中自定义了build/resources规则,确认配置文件所在目录被纳入了扫描范围,避免编译时配置文件被遗漏。
如果使用多环境配置,确认启动参数spring.profiles.active指定的环境对应的配置文件中包含该配置项。 - 检查配置加载逻辑是否受限
查看kafkaConsumerConfig类是否标注了@Profile、@ConditionalOnProperty这类条件注解,确认当前运行环境满足配置类的加载条件。
修复方案
- 补全配置项
在对应环境的配置文件中添加该配置,示例如下:
yml格式:
properties格式:ft: poll: sleep: duration: 1000 # 数值根据业务需求调整,单位通常为毫秒ft.poll.sleep.duration=1000 - 配置增加默认值
如果业务允许该配置缺失时使用默认值,修改@Value注解的写法,追加默认值即可避免启动失败:// 冒号后为默认值,配置不存在时会自动使用默认值 @Value("${ft.poll.sleep.duration:1000}") private Long pollSleepDuration; - 配置中心相关检查
如果该配置存储在Nacos、Apollo等外部配置中心,检查配置中心对应namespace、group下是否存在该配置,同时确认项目的配置中心连接参数、拉取规则配置正确,确保配置能被正常拉取到本地。
内容的提问来源于stack exchange,提问作者runnerpaul
相关产品推荐
相关产品推荐

