Spring Boot中spring.factories未加载,如何让应用加载该文件?
解决Spring中spring.factories未被加载的问题
先从最基础的排查点开始,一步步定位问题:
1. 确认spring.factories的路径与格式完全正确
- 路径必须严格是
src/main/resources/META-INF/spring.factories(Maven项目),打包后的JAR包里也得保持这个层级,大小写绝对不能错——比如把META-INF写成meta-inf会直接被忽略。 - 文件内容的key要和你的配置类类型匹配:你用的是
CustomConfigServiceBootstrapConfiguration,属于Spring Cloud的bootstrap阶段配置,所以key必须是org.springframework.cloud.bootstrap.BootstrapConfiguration,全类名要写完整,示例如下:
要是搞混了用成普通自动配置的org.springframework.cloud.bootstrap.BootstrapConfiguration=com.yourcompany.config.CustomConfigServiceBootstrapConfigurationorg.springframework.boot.autoconfigure.EnableAutoConfiguration,bootstrap阶段的配置肯定不会加载。
2. 检查Spring Cloud bootstrap功能是否启用
从Spring Boot 2.4版本开始,bootstrap机制默认是关闭的!如果你的项目用的是这个版本及以上,必须在application.properties或application.yml里加一行配置:
spring.cloud.bootstrap.enabled=true
不然所有bootstrap相关的配置类包括你的CustomConfigServiceBootstrapConfiguration都不会被触发。另外还要确认项目里引入了spring-cloud-context依赖,没有这个依赖的话bootstrap机制根本跑不起来。
3. 验证打包是否正确包含了spring.factories
- 打开你打包好的JAR包,直接查看里面有没有
META-INF/spring.factories文件——有时候Maven的资源配置会出问题,比如pom.xml里的<resources>标签没包含src/main/resources,导致这个文件没被打包进去。 - 如果是多模块项目,要确保存放spring.factories的模块已经被启动模块正确依赖,不然启动模块根本找不到这个文件。
4. 用调试手段确认加载情况
- 在启动类上加上
@EnableAutoConfiguration(debug=true),启动项目后控制台会输出自动配置的详细报告,你可以看看你的CustomConfigServiceBootstrapConfiguration有没有被列入候选配置;要是被排除了,报告里会说明原因(比如缺少依赖、条件不满足等)。 - 要是引入了Spring Boot Actuator,可以访问
/actuator/conditions(新版本)端点,里面会列出所有配置类的加载状态和判断依据,非常直观。 - 另外别忘了确认你的
CustomConfigServiceBootstrapConfiguration类上有没有加@Configuration注解——虽然BootstrapConfiguration会自动识别配置类,但加上这个注解更稳妥,避免因为Spring版本差异导致的问题。
5. Spring Boot 3.x的特殊情况
如果你的项目用的是Spring Boot 3.x,bootstrap机制的启用方式变了,你需要在配置文件里加spring.config.import=bootstrap.properties(或yml),同时要确保Spring Cloud版本和Spring Boot 3.x兼容(比如Spring Cloud 2022.0.x及以上)。
内容的提问来源于stack exchange,提问作者chad




