簡體   English   中英

Spring - “context:property-placeholder” - 屬性優先級

[英]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-placeholderp2.properties任何屬性將優先於p1.properties中的p1.properties

這是因為最后一個文件中的屬性始終優先。

您設置的是SysAdmins或DevOps人員覆蓋應用程序屬性的標准方法。 例如,您可以將第一個文件作為類路徑屬性文件,而第二個文件可能就像您擁有它一樣,這是一個基於文件系統的屬性文件,其值覆蓋第一個文件系統中的值。

如果檢查PropertiesLoaderSupportJavaDoc (它處理資源的加載並且是由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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM