gpt4 book ai didi

java - Spring 属性查找/优先级如何工作?

转载 作者:行者123 更新时间:2023-12-01 06:13:02 25 4
gpt4 key购买 nike

我已经为此奋斗了一段时间了。我用谷歌搜索并尝试了几种方法,但我发现的所有方法都无法解决我的问题。

    <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>

这就是我的属性位置。

<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/main/resources/com/lala/project/subproject1/subprojectA/configuration/myProperties.properties

以及我的“测试”属性

src/test/resources/com/lala/project/subproject1/subprojectA/test/configuration/myProperties.properties

显然,这些文件具有几乎相同的属性名称,但具有不同的值。我想知道的是为什么我在 subprojectA 中的测试不断选取我的“生产”属性而不是我的“测试”属性?换句话说,为什么 spring 不获取我的“测试”属性并覆盖我的“生产属性”?

我忘了提及,我不能简单地删除测试配置文件的“生产”属性位置,因为我需要其他项目、子项目的生产属性。

最佳答案

我只是发布我自己的答案,以防有人偶然发现类似的问题。

正如我所正确理解的那样,属性文件位置的优先级是向下的。换句话说,底部的位置具有最高优先级。

但是,问题不在于查找优先级,而在于查找的方式。 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>

关于java - Spring 属性查找/优先级如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com