文章目录
SpringBoot项目启动时报错A component required a bean of type ‘java.util.List’ that could not be found.,下面记录一下排查思路。
报错信息如下:
解决的方法其实不难,只是仅凭这个报错信息不好直接定位到问题出在哪里,下面我总结一下找到问题根源的几种方式
方式一
如果报错信息是A component required a bean of type 'Xxx' that could not be found.
还好,直接全局搜索Xxx即可找到是哪个Bean没注入成功,但是它显示的是List。一般平常使用注解注入或者构造注入,所以可以尝试搜索代码中可能注入一个List的位置,全局搜索下面的内容:
@Autowired
private List< // 或者搜public等修饰符
// 或者
@Resource
private List<
// 构造函数注入尝试搜索下面的内容
, List<
(List<
方式二
如果这种方式没搜到,那只能根据控制台日志来看了。我们可以看到日志中最后出现的类是LoggingFailureAnalysisReporter
全局搜索这个类,这个类是Spring框架的一个类,翻它的源码可以看到下面的代码。这个不就是控制台打印的内容吗
从这个方法是从哪里被调用的,最终跟踪到下面的这两处。这里就是SpringApplication的run方法,也就是一般启动类的第一行代码
所以我尝试把断点打在这两个地方,再运行代码,根据断点的信息,已经足够定位问题出现的位置了
方式三
这种方式刚才给的控制台日志也已经提示了
具体怎么做呢?
如果使用的是idea,可以参照下图方式配置,打开Run/Debug Configuration,点击Modify options
勾上Enable debug output,然后启动项目
控制台就会打印详细的异常堆栈信息
另外一种方式:还是看LoggingFailureAnalysisReporter源码
代码中打印异常堆栈的位置如下图所示,使用的apache-commons-logging打日志,所以将这个logger打印的日志级别配置成DEBUG级别,也可以打印详细信息,帮助排查问题
配置如下:
logging:
level:
org.springframework.boot.diagnostics: debug