2013-01-07 67 views
13

可以說我有一個配置:Spring屬性佔位符配置器中有多個位置的屬性解析順序是什麼?

<bean id="batchJobProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>first.properties</value> 
      <value>second.properties</value> 
     </list> 
    </property> 
</bean> 

first.properties擁有財產 「my.url = first.url」 second.properties擁有財產「my.url = second.url 「

那麼哪個值將被注入到」myUrl「bean?是否有任何已定義的屬性解析順序?

+0

採取看看這個鏈接-http://forum.springsource.org /showthread.php?36672-PropertyPlaceholderConfigurer-multiple-property-files –

回答

18

的Javadoc PropertiesLoaderSupport.setLocation狀態

的屬性文件集的位置加載。

可以指向經典屬性文件或遵循JDK 1.5屬性XML格式的XML文件。

注意:在重疊鍵的情況下,以後文件中定義的屬性將覆蓋定義先前文件的屬性。因此,請確保最具體的文件是給定位置列表中的最後一個文件。

因此,second.properties中my.url的值將覆蓋first.properties中my.url的值。

7

最後一個勝。

假設我們有props1.properties作爲

prop1=val1 

和props2.properties

prop1=val2 

和context.xml的

<context:annotation-config /> 
<bean id="batchJobProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>/props1.properties</value> 
      <value>/props2.properties</value> 
     </list> 
    </property> 
</bean> 
<bean class="test.Test1" /> 

然後

public class Test1 { 
    @Value("${prop1}") 
    String prop1; 

    public static void main(String[] args) throws Exception { 
     ApplicationContext ctx = new ClassPathXmlApplicationContext("/test1.xml"); 
     System.out.println(ctx.getBean(Test1.class).prop1); 
    } 

} 

打印

VAL2

,如果我們改變上下文

 <list> 
      <value>/props2.properties</value> 
      <value>/props1.properties</value> 
     </list> 

相同測試打印

val1