自定义spring-boot-starter中定义的配置属性无法被覆盖是否为正常行为
Spring Boot 自定义Starter配置覆盖失效问题解答
核心结论
这不属于Spring Boot的预期行为,是你的Starter实现逻辑存在问题。
原因说明
- Spring Boot 默认配置加载优先级规则中,应用自身类路径下的
application.yaml优先级高于第三方依赖Jar包内的application.yaml,正常场景下应用配置可以正常覆盖some-service-spring-boot-starter包内的同名配置,包括server.port这类通用属性。 - 常见的覆盖失效诱因:
- 你在Starter的自动配置类中,手动注册了优先级高于应用配置的
PropertySource属性源 - Starter的
application.yaml中配置了spring.config.import引入了高优先级配置 - 打包Starter时错误将配置文件输出到了
config/等高优先级加载路径下
- 你在Starter的自动配置类中,手动注册了优先级高于应用配置的
- 标准Starter默认配置实现规范:不推荐在自定义Starter中直接放入
application.yaml作为默认配置,更合理的方案是通过@ConfigurationProperties注解声明配置并设置字段默认值,或通过@PropertySource引入Starter内的配置文件时显式指定低优先级。
排查方式
你可以给消费端应用添加启动参数--debug=true,查看启动日志中Config data location的加载顺序,即可明确两个配置文件的加载优先级,定位问题根因。
内容的提问来源于stack exchange,提问作者Yuri Dolzhenko
相关产品推荐
相关产品推荐

