Spring – “context:property-placeholder” – 属性优先级
我有一个由许多应用程序组成的项目。
我在我的一个应用程序中有这个。
现在,我想在p2.properties
定义一个已存在于p1.properties
中的p1.properties
。 这就是我想在p2中基本覆盖该属性(给它一个不同的值)。 这是因为在运行时p1在许多应用程序之间共享,而p2仅由我的应用程序使用。 所以我不想影响所有应用程序,只是我的应用程序。
1)我想知道我将在p2中定义的属性值是否优先。
2) location
的顺序是否重要,如果是,则第二个
优先于第一个?
您配置property-placeholder
, p2.properties
任何属性将优先于p1.properties
中的p1.properties
。
这是因为最后一个文件中的属性始终优先。
您设置的是SysAdmins或DevOps人员覆盖应用程序属性的标准方法。 例如,您可以将第一个文件作为类路径属性文件,而第二个文件可能就像您拥有它一样,这是一个基于文件系统的属性文件,其值覆盖第一个文件系统中的值。
如果检查PropertiesLoaderSupport
的JavaDoc (它处理资源的加载并且是由PropertySourcesPlaceholderConfigurer
扩展的抽象类),您将在setLocations
方法中看到它具有以下注释
注意:在重叠键的情况下,在以后的文件中定义的属性将覆盖先前定义的文件的属性。 因此,请确保最具体的文件是给定位置列表中的最后一个文件。
您可以通过定义2个占位符并使用“order”属性来明确优先顺序。 下面是我的一个应用程序的示例,其中外部配置文件将始终覆盖类路径上的那个。
根据我的经验,位置的顺序很重要。 文件按声明的顺序加载(p2之前的p1)。
如果多次声明属性,则它是最后找到的值。 (所以p2中的值)
我们经常使用此系统来覆盖特定于环境的属性。