SpringBoot自动配置未生效时,需在application.properties中添加debug=true(或启动参数--debug)才能输出ConditionEvaluationReport日志;报告分为Positive matches和Negative matches两部分,后者明确列出被跳过的配置类及失败原因,如@ConditionalOnClass未找到类、@ConditionalOnMissingBean已存在Bean、@ConditionalOnProperty配置不满足等,据此可精准定位缺失依赖或错误配置。

SpringBoot启动时自动配置没生效,控制台日志里一堆ConditionEvaluationReport信息却看不懂,根本分不清是哪个条件没满足、为什么跳过、该补什么依赖或改哪行配置。
先让SpringBoot把条件评估报告打出来
在application.properties里加一行:debug=true 或者启动时加参数 --debug。
这一步必须做,否则日志里压根不会输出ConditionEvaluationReport,你连看都没得看。
注意:只加logging.level.org.springframework.boot.autoconfigure=DEBUG不够——它只会打印“跳过了XxxAutoConfiguration”,但不告诉你具体哪个@Conditional失败、失败原因是什么。
定位关键日志段落
启动日志滚动结束后,向上翻,找到以【Condition evaluation report】开头的大段文字。
它不是散落在各处的零星日志,而是集中输出的一块结构化文本,通常夹在“Started XXXApplication in X.XXX seconds”之前。
如果没找到这个标题,说明debug没生效,或者应用根本没走到自动配置评估阶段(比如启动就报错退出了)。
看懂“Positive matches”和“Negative matches”两栏
报告主体分为两大块:Positive matches(满足条件、已生效的配置类)和Negative matches(不满足条件、被跳过的配置类)。
Negative matches才是你要盯死的地方——它直接列出所有被跳过的自动配置类,并附带每条跳过的具体原因。
例如看到这一行:
DataSourceAutoConfiguration (DataSourceCondition) did not match:<br> - @ConditionalOnClass did not find required class 'javax.sql.DataSource'
将 Spring Boot 2.7 项目升级到 Spring Boot 3.5 的实战流程,覆盖版本基线、依赖坐标替换、Jakarta 迁移、配置兼容、异步上下文传递改造与验证门禁。用于企业多模块 Maven 项目升级与排障。
这就明确告诉你:类路径里缺javax.sql.DataSource这个类——本质就是没引入任何JDBC驱动或数据源starter,比如漏了spring-boot-starter-jdbc或spring-boot-starter-data-jpa。
重点识别三类常见失败原因
方法一:@ConditionalOnClass未命中
日志关键词:@ConditionalOnClass did not find required class
意味着你缺少某个关键依赖jar包。比如要启用Redis自动配置,但pom里没加spring-boot-starter-data-redis,日志就会提示找不到org.springframework.data.redis.connection.RedisConnectionFactory。
方法二:@ConditionalOnMissingBean已存在
日志关键词:@ConditionalOnMissingBean (types: xxx; SearchStrategy: all) did not find any beans → 这其实是满足的;但如果是did not match because found bean 'xxx',说明你代码里已经定义了一个同类型Bean,自动配置主动让位了。
方法三:@ConditionalOnProperty不满足
日志关键词:@ConditionalOnProperty (spring.profiles.active) did not find property 'spring.profiles.active' 或 @ConditionalOnProperty (my.feature.enabled) matched(这是满足的)/ did not match(这是不满足)。检查对应配置项是否拼写错误、是否在当前激活的profile下、值是否为false或空字符串。
【注意】 如果日志里出现@ConditionalOnWebApplication did not match,而你确实在写Web项目,大概率是你用了spring-boot-starter而非spring-boot-starter-web——前者不含Servlet API依赖,Spring Boot就判定你不是Web应用。
快速验证某条条件是否真不满足
第一步:从Negative matches里抄下失败的自动配置类全名,比如DataSourceAutoConfiguration;
第二步:打开IDEA,用Ctrl+点击跳转到这个类源码;
第三步:找到顶部的@ConditionalOnClass或@ConditionalOnProperty注解,看清它检查的是哪个类、哪个属性、哪个值;
第四步:对照你的pom.xml或application.yml,确认对应依赖是否存在、配置键是否拼对、值是否符合预期。
这一步操作起来很简单,直接把类名丢进IDE搜索就行,比靠记忆猜快得多。

















