2012-05-03 10 views
6

Me enfrenta un problema simple aquí. Tengo dos archivos de propiedades que quiero leer para crear dos fuentes de datos. ¡Sin embargo, esos archivos de propiedades tienen exactamente las mismas claves! Soy capaz de leer tanto los archivos usando:¿Cómo se leen propiedades múltiples que tienen las mismas claves en primavera?

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

Pero entonces yo no soy capaz de acceder al valor correcto:

<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> 

¿Cómo puedo leer mis propiedades para que pueda utilizar variables como ${foo1.driver} y saber cuál se llama?

¡Gracias por tu ayuda!

Respuesta

6

intentar algo como esto (no probado):

<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

¡Buen hack! (+1) –

+0

¡Funciona a la perfección! ¡Muchas gracias! –

1

Creo que lo que me gustaría hacer es extender PropertyPlaceHolderConfigurer.

A mí parece que usted tiene que reemplazar el método PropertiesLoaderSupport.loadProperties(Properties)

Lo que me gustaría hacer es añadir un alojamiento "prefijos"

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

Y iterar sobre estos prefijos al leer los recursos de propiedades.

Cuestiones relacionadas