read propertysource property leer example context application java properties spring

java - propertysource - Cómo recolectar propiedades de primavera de múltiples archivos para usar en un solo grano



spring properties (2)

Todavía no me he vuelto a la cabeza en Spring, así que corrígeme si esta pregunta no tiene sentido ...

Tengo un PropertyPlaceholderConfigurer

<bean id="rdbmPropertiesPlacholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false"> <property name="location" value="classpath:/properties/rdbm.properties" /> </bean>

Y tengo un frijol inyectado, supongo?

<bean id="PortalDb" class="org.apache.commons.dbcp.BasicDataSource"> <property name="driverClassName" value="${hibernate.connection.driver_class}" /> <property name="url" value="${hibernate.connection.url}" /> <property name="username" value="${hibernate.connection.username}" /> <property name="password" value="${hibernate.connection.password}" /> ...

Lo que quiero es un segundo marcador de posición apuntando a un archivo de propiedades diferente con el nombre de usuario / contraseña para que pueda dividir las propiedades en dos archivos diferentes. Entonces, la información de conexión de la base de datos puede estar separada del nombre de usuario / contraseña db, y puedo controlar uno y no el otro.

Intenté básicamente copiar el rdbmPropertiesPlaceholder con una identificación y un archivo diferentes e intentar acceder a las propiedades, pero no funciona.

Este código es del proyecto del portal web de uPortal de código abierto.


El uso de esta notación le permite especificar varios archivos:

<bean id="rdbmPropertiesPlacholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" lazy-init="false"> <property name="locations"> <list> <value>classpath:/properties/rdbm.properties</value> <value>classpath:/properties/passwords.properties</value> </list> </property> </bean>

El configurador de ubicación de propiedad simplemente fusiona todos estos para que parezca que solo hay uno, por lo que las definiciones de bean no saben de dónde provienen las propiedades.


El org.springframework.beans.factory.config.PropertyPlaceholderConfigurer puede hacer esto (como ya se respondió. Lo que puede querer hacer es utilizar el espaciado entre nombres para que pueda hacer referencia a las mismas propiedades de ambos archivos sin ambigüedad. tu ejemplo, puedes hacer esto:

<bean id="generalPropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:/properties/general.properties"/> </bean> <bean id="db.PropertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> <property name="location" value="classpath:/properties/rdbm.properties" /> <property name="placeholderPrefix" value="$db{" /> <property name="placeholderSuffix" value="}" /> </bean>

En sus archivos de contexto, ahora puede referirse a las propiedades generales con $ {someproperty} , y hacer referencia a las propiedades de rdbm con $ db {someproperty} .

Esto hará que sus archivos de contexto sean mucho más claros y claros para el desarrollador.