[英]Spring - “context:property-placeholder” - property priority
我有一個由許多應用程序組成的項目。
我在我的一個應用程序中有這個。
<context:property-placeholder location="file:/config/p1.properties,file:/config/p2.properties" />
現在,我想在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”屬性來明確優先順序。 下面是我的一個應用程序的示例,其中外部配置文件將始終覆蓋類路徑上的那個。
<!-- 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" />
根據我的經驗,位置的順序很重要。 文件按聲明的順序加載(p2之前的p1)。
如果多次聲明屬性,則它是最后找到的值。 (所以p2中的值)
我們經常使用此系統來覆蓋特定於環境的屬性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.