多环境配置文件优先级:应用项目与依赖Jar的配置加载顺序
优先级分析与问题排查
核心加载规则
- Ordinal值决定基础优先级:值越大优先级越高。所以所有
application-dev.properties(ordinal=251)的优先级高于application.properties(ordinal=250),即环境专属配置会覆盖默认配置中的同名属性。 - 同Ordinal的配置源优先级:当多个配置源ordinal相同时,规范未固定顺序,具体取决于框架实现。从你的打印结果来看,项目内的配置源排在Jar包配置源之前,但属性加载时后加载的配置源会覆盖先加载的,如果Jar包内的配置源加载顺序更靠后,它的属性就会覆盖项目内的。
你的问题原因
app.some.feature.enabled显示为true(预期false),大概率是以下两种情况:
- 项目内的
application-dev.properties和application.properties中未配置该属性,系统自动使用Jar包中配置的true值; - 如果项目内配置了false,但被Jar包配置覆盖,说明同ordinal下Jar包的配置源加载顺序更靠后,优先级更高。
解决方案
要确保项目内的配置绝对覆盖Jar包中的同属性,可以:
- 在项目内的配置文件中添加
config_ordinal=252(比默认的251更高),提升其ordinal值; - 使用优先级更高的配置源(如系统属性、环境变量)来覆盖该属性。
内容的提问来源于stack exchange,提问作者eric eric




