2013-01-07 17 views
13

Powiedzmy mam konfigurację:Co to jest kolejność rozstrzygania właściwości w narzędziu Symulator zastępczy właściwości Spring z wieloma lokalizacjami?

<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 ma właściwość "my.url = first.url" second.properties ma właściwość „my.url = second.url "

Która wartość zostanie wprowadzona do komponentu" myUrl "? Czy istnieje określona kolejność rozwiązywania właściwości?

+0

Weź spojrzenie na ten link-http: //forum.springsource.org /showthread.php?36672- WłaściwośćPlaceholderKonfigurer-multiple-property-files –

Odpowiedz

18

Javadoc dla PropertiesLoaderSupport.setLocation Zjednoczone

Set lokalizacje plików właściwości mają zostać załadowane.

Może wskazywać klasyczne pliki właściwości lub pliki XML, które są zgodne z formatem XML właściwości JDK 1.5.

Uwaga: Właściwości zdefiniowane w późniejszych plikach zastąpią właściwości określone wcześniej plikami, w przypadku nakładających się kluczy. Dlatego upewnij się, że najbardziej konkretne pliki są ostatnimi na podanej liście lokalizacji.

Wartość my.url w second.properties spowoduje nadpisanie wartości my.url w first.properties.

7

Ostatni wygrywa.

Zakładając mamy props1.properties jak

prop1=val1 

i props2.properties

prop1=val2 

i 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" /> 

następnie

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); 
    } 

} 

drukuje

wart2

a jeśli zmieniamy kontekst jako

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

same wydruki testowe

val1 
Powiązane problemy