2012-05-03 18 views
6

Sto affrontando un semplice problema qui. Ho due file di proprietà che voglio leggere per creare due origini dati. Tuttavia questi file di proprietà hanno esattamente le stesse chiavi! Sono in grado di leggere sia i file utilizzando:Come leggere più proprietà con le stesse chiavi in ​​primavera?

<context:property-placeholder 
    location="classpath:foo1.properties,classpath:foo2.properties"/> 

Ma poi io non sono in grado di accedere il giusto valore:

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" 
    destroy-method="close"> 
    <property name="driverClassName" value="${driver}" /> <!-- Which one? --> 
    <property name="url" value="${url}" />    <!-- Which one? --> 
    ... 
</bean> 

Come posso leggere le mie proprietà in modo da poter utilizzare le variabili come ad esempio ${foo1.driver} e sai quale si chiama?

Grazie per l'aiuto!

risposta

6

provare qualcosa di simile (non testato):

<bean id="config1" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="ignoreUnresolvablePlaceholders" value="true"/> 
     <property name="placeholderPrefix" value="${foo1."/> 
     <property name="locations"> 
     <list> 
      <value>classpath:foo1.properties</value> 
     </list> 
     </property> 
    </bean> 

    <bean id="config2" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="ignoreUnresolvablePlaceholders" value="false"/> 
     <property name="placeholderPrefix" value="${foo2."/> 
     <property name="locations"> 
     <list> 
      <value>classpath:foo2.properties</value> 
     </list> 
     </property> 
    </bean> 
+0

Bel trucco! (+1) –

+0

Funziona perfettamente! Molte grazie! –

1

Credo che quello che farei è di estendere PropertyPlaceholderConfigurer.

A me sembra che si deve eseguire l'override del metodo PropertiesLoaderSupport.loadProperties(Properties)

Quello che mi piacerebbe fare è aggiungere un alloggio "prefissi"

public void setPrefixes(List<String> prefixes){ 
    this.prefixes = prefixes; 
} 

E iterare su questi prefissi durante la lettura delle risorse Properties.

Problemi correlati