propertysource - ¿Cómo se configura un contenedor Spring Bean para cargar un archivo de propiedades Java?
propertysourcesplaceholderconfigurer (6)
¿Cómo se configura un contenedor de bean Spring (o contexto de aplicación) para cargar un archivo de propiedades Java?
El artículo de JavaWorld Smartly Load Your Properties explica cómo cargar archivos de propiedades desde classpath utilizando uno de los siguientes métodos de procesamiento de recursos en la biblioteca estándar de Java:
ClassLoader.getResourceAsStream ("some/pkg/resource.properties");
Class.getResourceAsStream ("/some/pkg/resource.properties");
ResourceBundle.getBundle ("some.pkg.resource");
¿Cómo puede hacer lo mismo con un contenedor de frijoles primavera?
Hay una cosa llamada PropertyPlaceholderConfigurer, puedes usarla para inyectar tus beans con valores de un archivo de propiedades, como este:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<value>classpath:com/foo/jdbc.properties</value>
</property>
</bean>
<bean id="dataSource" destroy-method="close"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driverClassName}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
La documentación de referencia de Spring Framework (2.5.x) proporciona dos ejemplos de cómo cargar un archivo de propiedades en un contenedor de beans , uno antes del lanzamiento de la versión 2.5 y una forma más concisa utilizando la función <util:properties/>
que se introdujo en versión 2.5:
Antes de la versión 2.5:
<!-- creates a java.util.Properties instance with values loaded from the supplied location -->
<bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value="classpath:com/foo/jdbc-production.properties"/>
</bean>
Después de la versión 2.5:
<!-- creates a java.util.Properties instance with values loaded from the supplied location -->
<util:properties id="jdbcConfiguration" location="classpath:com/foo/jdbc-production.properties"/>
Tenga en cuenta que para utilizar <util:properties/>
, debe declarar el espacio de nombres y la ubicación del esquema de la util
en el preámbulo en la parte superior de su archivo de configuración Spring XML:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<!-- <bean/> definitions here -->
</beans>
Si desea hacer referencia al objeto como una instancia de java.util.Properties
, debe hacer lo siguiente:
<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="ignoreResourceNotFound"><value>true</value></property>
<property name="locations">
<list>
<value>classpath:property-file.properties</value>
</list>
</property>
</bean>
Esto le permite hacer referencia a las properties
Spring Bean como una instancia de java.util.Properties
. Incluso puede hacer que combine varios archivos de propiedades agregando más valores a la location
. Consulte esta descripción de las cadenas de recursos para obtener información sobre los tipos de valores que Spring aceptará para la ubicación. Si quiere usar sustituciones de estilo ${}
en Spring XML, puede ver que hay otras respuestas que describen cómo hacerlo.
Usamos esto:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
<property name="locations">
<value>classpath:test.properties</value>
</property>
</bean>
Que permite que las propiedades definidas allí se utilicen como referencias en los archivos de configuración
Para obtener más información, consulte:
Por ejemplo, a través de PropertiesFactoryBean . Use PropertyPlaceholderConfigurer para configurar beans en el contexto mediante propiedades.
Encontrará ejemplos de PropertyPlaceholderConfigurer en las otras respuestas. Aquí hay un ejemplo de PropertiesFactoryBean:
<bean id="properties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property name="location" value=classpath:config/applicationConfig.properties"/>
</bean>
Su archivo beans.xml
debe tener un PropertyPlaceholderConfigurer
:
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:some/pkg/resource.properties</value>
</list>
</property>
<!-- Default values for backwards compatibility -->
<property name="properties">
<props>
<prop key="name">value</prop>
</props>
</property>
</bean>
Y luego puede hacer referencia a las propiedades como tales en cualquier lugar de beans.xml
:
<bean class="${blah}">
....
<bean>
Para un artículo sobre esto, mira http://almaer.com/blog/spring-propertyplaceholderconfigurer-a-nice-clean-way-to-share