我一直在与此斗争已有一段时间了。我已经谷歌并尝试了几个东西,但我发现的一切都无法解决我的问题。
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" ref="propertiesLocations" />
<property name="searchSystemEnvironment" value="true" />
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
</bean>
这就是我作为我的propertiesLocations。
<beans profile="">
<util:list id="propertiesLocations">
<value>classpath:com/lala/project/configuration/core.properties
</value>
<value>classpath*:com/lala/project/**/configuration/*.properties
</value>
<value>classpath*:com/lala/project/**/test/configuration/*.properties
</value>
<value>classpath*:project.properties
</value>
</util:list>
</beans>
<beans profile="test">
<util:list id="propertiesLocations">
<value>classpath:com/lala/project/configuration/core.properties
</value>
<value>classpath*:com/lala/project/**/configuration/*.properties
</value>
<value>classpath*:com/lala/project/**/test/configuration/*.properties
</value>
<value>classpath*:project-test.properties
</value>
<value>classpath*:project.properties
</value>
</util:list>
</beans>
<beans profile="testing">
<util:list id="propertiesLocations">
<value>classpath:com/lala/project/configuration/core.properties
</value>
<value>classpath*:com/lala/project/**/configuration/*.properties
</value> <!-- production properties -->
<value>classpath*:com/lala/project/**/test/configuration/*.properties <!-- test properties -->
</value>
<value>classpath*:project-testing.properties
</value>
<value>classpath*:project.properties
</value>
</util:list>
</beans>
然后,在我的一个子项目中,我有2个属性文件,我的“生产”属性
的src /主/资源/ COM /拉拉/项目/ subproject1 / subprojectA /配置/ myProperties.properties
和
下的“测试”属性的src /测试/资源/ COM /拉拉/项目/ subproject1 / subprojectA /测试/配置/ myProperties.properties
显然,这些文件具有几乎相同的属性名称,具有不同的值。 我想知道的是为什么我在子项目A中的测试不断提取我的“生产”属性而不是我的“测试”属性?换句话说,为什么spring没有拿起我的“测试”属性并覆盖我的“生产属性”?
我忘了提到我不能简单地删除测试配置文件的“生产”属性位置,因为我需要来自其他项目,子项目的生产属性。
答案 0 :(得分:0)
我发布自己的答案,以防万一有人遇到类似的问题。
正如我所理解的那样,属性文件位置的优先级向下工作。换句话说,底部的位置具有/最优先。
但问题不在于查找优先级,而在于查找的方式。看起来好像Spring并不喜欢这两行:
<value>classpath*:com/lala/project/**/configuration/*.properties
</value>
<value>classpath*:com/lala/project/**/test/configuration/*.properties
</value>
经过多次试验后我得出的结论是,由于第二个正则表达式匹配的路线/位置也与第一个匹配,因此第一行考虑了它们,然后不是考虑到第二行(我正在思考查找过程,因为它从上到下逐行处理)。
所以我最终做的是改变我的测试属性的位置,比如
<value>classpath*:com/lala/project/**/test/configuration/*.properties
</value>
类似
<value>classpath*:com/lala/project/**/configuration/test/*.properties
</value>
答案 1 :(得分:-1)
尝试更改您的测试属性路径:
file:src/test/resources/com/lala/project/configuration/core.properties