Spring多属性文件中属性值选择机制求证及官方文档咨询
Spring多属性文件中同名属性的取值规则
你的核心猜测是正确的:Spring确实通过维护一个PropertySources列表管理所有属性源,当需要获取某个属性值时,会按列表顺序逐个遍历,返回第一个匹配到的属性值。
属性源的顺序规则
用@PropertySource注解加载多个属性文件时,顺序并非随机:
- 注解中后声明的属性文件会被添加到PropertySources列表的更靠前位置,也就是优先级更高。比如你在
@Configuration类里写@PropertySource({"classpath:file1.properties", "classpath:file2.properties"}),file2对应的属性源会排在file1前面,所以获取foo.baz时会先找到file2里的值,这和你测试得到的结果完全一致。 - 你之前觉得“取值随机”,大概率是在复杂场景下(比如结合了系统属性、环境变量、Spring Boot自动配置的属性源等),不同属性源的优先级顺序叠加导致的,但仅通过
@PropertySource加载本地属性文件时,顺序是由注解声明顺序明确控制的。
官方文档的明确说明
Spring官方文档中对@PropertySource的行为有清晰定义:通过该注解添加的属性源会按照声明的顺序被注册到Environment的PropertySources集合中,后续添加的属性源优先级高于先添加的,当存在同名属性时,优先级高的属性源中的值会被优先返回。
内容的提问来源于stack exchange,提问作者PatS
相关产品推荐
相关产品推荐

