Java 春天——”;上下文:属性占位符";-财产优先权

Java 春天——”;上下文:属性占位符";-财产优先权,java,spring,Java,Spring,我有一个由许多应用程序组成的项目。 我的一个应用程序中有这个 现在,我想在p2.properties中定义一个属性,它已经存在于p1.properties中。也就是说,我希望基本上覆盖p2中的属性(给它一个不同的值)。这是因为在运行时p1在许多应用程序之间共享,而p2仅由我的应用程序使用。所以我不想影响所有的应用,只想影响我的应用 1) 我想知道我将在p2中定义的属性值是否优先。 2) 位置的顺序是否重要,如果重要,第二个顺序是否重要 优先于第一个 按照您配置属性占位符的方式,您在p2中拥有的

我有一个由许多应用程序组成的项目。
我的一个应用程序中有这个

现在,我想在
p2.properties
中定义一个属性,它已经存在于
p1.properties
中。也就是说,我希望基本上覆盖p2中的属性(给它一个不同的值)。这是因为在运行时p1在许多应用程序之间共享,而p2仅由我的应用程序使用。所以我不想影响所有的应用,只想影响我的应用

1) 我想知道我将在p2中定义的属性值是否优先。
2)
位置的顺序是否重要,如果重要,第二个顺序是否重要

优先于第一个

按照您配置
属性占位符的方式,您在
p2中拥有的任何属性将优先于
p1中的属性

这是因为上一个文件中的属性始终优先

您所设置的是系统管理员或DevOps人员覆盖应用程序属性的标准方法。例如,第一个文件可以是类路径属性文件,而第二个文件可以是基于文件系统的属性文件,其值覆盖第一个文件中的值

如果您检查
属性LoaderSupport
(它处理资源的加载,并且是一个抽象类,由
属性资源占位符配置器
扩展),您将看到在
setLocations
方法中,它有以下注释

注意:在以后的文件中定义的特性将覆盖特性 在关键点重叠的情况下,定义了早期文件。因此,请确保 最具体的文件是给定列表中的最后一个文件 地点


根据我的经验,位置顺序很重要。文件按声明顺序加载(p1在p2之前)。
如果多次声明某个属性,则将采用最后找到的值。(因此p2中的值)


我们经常使用此系统覆盖特定于环境的属性。

您可以通过定义2个占位符并使用“order”属性来明确优先级顺序。下面是我的一个应用程序的示例,其中外部配置文件将始终覆盖类路径上的配置文件

<!-- DEFINE TWO CONFIGURATION FILES: FOR LOCAL DEVELOPMENT THESE WILL NORMALLY 
        BE READ FROM A FILE BUNDLED WITH APPLICATION. ONCE DEPLOYED THESE SHOULD 
        BE READ FROM AN EXTERNAL CONFIGURATION FILE AT THE SPECIFIED LOCATION. THE 
        EXTERNAL FILE SHOULD OVERRIDE THE BUNDLED FILE (CONTROLLED VIA THE ORDER 
        ATTRIBUTE: LOWEST WINS) -->

    <context:property-placeholder
        location="file:/apps/jboss-jpp/jboss-jpp-6.0/standalone/configuration/land.properties"
        ignore-resource-not-found="true" ignore-unresolvable="true" order="1" />

    <context:property-placeholder location="classpath*:/land.properties"
        ignore-resource-not-found="false" ignore-unresolvable="false" order="2" />


也许你可以试试!嗯,好主意。我只是不太确定如何在运行时获取它。所讨论的属性是
org.quartz.threadPool.threadCount
。我会朝那个方向想。实际上我会用另一个属性来测试它。那很好,正是我需要的。。。你能给我指一些证实你陈述的证明文件吗?谢谢。我也试过了,结果也一样。第二个文件,即其属性值优先。@peter.petrov Great!快乐编码:)谢谢,这似乎也是一个不错的方法。这可能会破坏为@Value中定义的属性设置默认值的功能。关于这一点,这里有一个开放的bug报告:阅读该bug报告中的注释,Spring团队似乎不希望在一个上下文中有多个属性占位符配置器,将来可能会反对它。