Spring Boot自动装配不生效的根源在于:AutoConfiguration.imports文件缺失或错误、条件注解未满足(如类路径缺依赖、配置开关未启用)、启动类包路径不当、exclude误排除基础配置,以及Spring Boot 3.x中未用@AutoConfiguration替代@Configuration且未删除spring.factories。

Spring Boot自动装配不生效,表现为依赖的starter功能缺失、Bean未注册、配置未加载,比如加了spring-boot-starter-data-redis却找不到RedisTemplate Bean,或RocketMQ客户端根本没初始化。
确认自动配置类是否进入候选列表
启动应用时添加JVM参数:-Ddebug=true 或在application.properties中设置logging.level.org.springframework.boot.autoconfigure=DEBUG。观察控制台输出中AutoConfigurationImportSelector打印的“Automatically configured”列表,确认目标自动配置类(如RedisAutoConfiguration)是否出现在其中。
若未出现,说明该配置类压根没被扫描到——【必须检查starter的META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports文件是否存在且格式正确】。Spring Boot 3.x已完全弃用spring.factories,旧项目升级后若残留该文件但未同步更新AutoConfiguration.imports,会导致所有自动配置静默失效。
验证条件注解是否全部满足
方法一:查看对应自动配置类源码中的@ConditionalOnXXX注解链。例如JpaAutoConfiguration要求@ConditionalOnClass({LocalContainerEntityManagerFactoryBean.class, EntityManager.class}),只要javax.persistence.EntityManager不在classpath中,整个配置立即跳过。
方法二:用mvn dependency:tree -Dincludes=org.hibernate:hibernate-core等命令确认关键依赖是否真实引入。常见陷阱是使用了provided scope或test scope导致运行时缺失类。
方法三:检查@ConditionalOnProperty绑定的配置项。比如spring.redis.enabled=true未显式设置时,RedisAutoConfiguration默认不生效——【注意:很多starter的enable开关默认为false,必须手动设为true】。
排查启动类与包结构问题
第一步:确认主启动类所在包路径是否为最顶层包。例如项目根包为com.example.myapp,启动类必须放在com.example.myapp下,不能放在com.example.myapp.util或com.example.myapp.config子包中。
第二步:若启动类位置合规但自定义配置类仍未生效,检查是否误用了@SpringBootApplication(exclude = {...})。排除列表里若包含DataSourceAutoConfiguration.class这类基础配置,会连带阻断依赖它的其他自动配置(如JPA、MyBatis-Plus)。
第三步:检查是否有重复定义同类型Bean。例如手动声明了@Bean DataSource dataSource(),而自动配置的HikariDataSource因@ConditionalOnMissingBean(DataSource.class)被跳过——此时需确认自己定义的Bean是否满足所有下游组件的构造要求,否则会出现“Bean存在但功能异常”的假象。
处理Spring Boot 3.x专属变更
Spring Boot 3.0起强制要求自动配置类使用@AutoConfiguration替代@Configuration,且必须声明在META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports中,每行一个全限定类名,不可带空格或注释。旧版spring.factories文件必须彻底删除,否则Boot 3.x会忽略它但不报错,造成配置“消失于无形”。
若你正在开发starter,需将原@Configuration类改为@AutoConfiguration,并确保其模块的build.gradle中声明了implementation 'org.springframework.boot:spring-boot-autoconfigure'依赖——缺少此依赖会导致编译期无@AutoConfiguration注解,构建成功但运行时配置类被JVM忽略。


















