¿Cómo leer múltiples propiedades que tienen las mismas claves en Spring?

Estoy enfrentando 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! Puedo leer ambos archivos usando:

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

Pero entonces no puedo 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 poder usar variables como ${foo1.driver} y sabes cual se llama?

¡Gracias por ayudar!

preguntado el 03 de mayo de 12 a las 15:05

2 Respuestas

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

contestado el 03 de mayo de 12 a las 15:05

Supongo que lo que haría sería extender PropertyPlaceHolderConfigurer.

Para mí, parece que tienes que anular el método. PropertiesLoaderSupport.loadProperties(Properties)

Lo que haría es agregar una propiedad "prefijos"

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

E itere sobre estos prefijos mientras lee los recursos de Propiedades.

contestado el 03 de mayo de 12 a las 15:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.