Diferencia entre revisiones de «PropertyPlaceholderConfigurer»
(Página creada con 'Category:Spring Framework Dependiendo el tipo de aplicación y entorno, la configuración del contexto de Spring Framework varia. ==Aplicaciones web== En las aplicacio…') |
(→Ver también) |
||
(No se muestran 5 ediciones intermedias de 3 usuarios) | |||
Línea 1: | Línea 1: | ||
− | [[ | + | La clase ''org.springframework.beans.factory.config.PropertyPlaceholderConfigurer'' de [[Spring Framework]] nos permite hacer referencia a propiedades de archivos de texto en la configuración de Spring. De esta manera podemos externalizar ciertos valores a un archivo .properties de texto. Además, esta clase nos permite [[Obtener Variables De Entorno Con Spring]]. |
− | |||
− | == | + | == La clase PropertyPlaceholderConfigurer == |
− | |||
− | + | ''PropertyPlaceholderConfigurer'' se usa para externalizar valores de propiedades de la definición de un bean, en un archivo separado con formato de Java Properties. Esto resulta muy útil para que la persona que despliega la aplicación pueda configurar en este archivo valores específicos del entorno (por ejemplo, URLs de base de datos, nombres de usuario y contraseñas, etc.) de forma simple, sin la complejidad de modificar una definición en XML. | |
+ | |||
+ | Además, es muy facil tener varias "versiones" de este archivo properties, una para cada ambiente en donde se despliegue la aplicación (desarrollo, testing, producción, etc.). | ||
+ | |||
+ | == Ejemplo == | ||
+ | |||
+ | Podemos considerar el siguiente archivo de configuración, en donde se declara un bean DataSource cuyos atributos están externalizados. Luego se completan estos valores en un archivo .properties externo. En tiempo de ejecución se reemplazarán los valores del XML con los valores correspondientes del archivo de properties. | ||
+ | |||
+ | El tag ''context:property-placeholder'' se encarga de hacer referencia al archivo de propiedades que Spring usará para completar las referencias. | ||
+ | |||
+ | El archivo de Spring XML sería: | ||
+ | |||
+ | <code 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:context="http://www.springframework.org/schema/context" | ||
+ | xsi:schemaLocation="http://www.springframework.org/schema/beans | ||
+ | http://www.springframework.org/schema/beans/spring-beans-2.5.xsd | ||
+ | http://www.springframework.org/schema/context | ||
+ | http://www.springframework.org/schema/context/spring-context-2.5.xsd"> | ||
+ | |||
+ | <context:property-placeholder location="classpath:conf.properties"/> | ||
+ | |||
+ | <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> | ||
+ | |||
+ | </beans> | ||
+ | </code> | ||
+ | |||
+ | El archivo de propiedades ''conf.properties'' podría ser: | ||
+ | <code ini> | ||
+ | jdbc.driverClassName=org.hsqldb.jdbcDriver | ||
+ | jdbc.url=jdbc:hsqldb:hsql://production:9002 | ||
+ | jdbc.username=sa | ||
+ | jdbc.password=root | ||
+ | </code> | ||
+ | |||
+ | === Ubicando conf.properties fuera del classpath === | ||
+ | |||
+ | Es posible ubicar el archivo de propiedades fuera del classpath, en cualquier lugar del sistema de archivos. Por ejemplo, si el archivo de configuración se encuentra en ''/var/conf/conf.properties'' deberemos escribir: | ||
− | |||
<code xml> | <code xml> | ||
− | + | <context:property-placeholder location="file:///var/conf/conf.properties"/> | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
</code> | </code> | ||
− | === | + | === Instanciando un BeanFactory en los tests === |
− | + | ||
+ | Para instanciar un BeanFactory para utilizar en los tests, es necesario que lea los archivos de properties. Para esto se utiliza la fábrica de beans ClassPathXmlApplicationContext, ej: | ||
+ | |||
<code java> | <code java> | ||
− | + | import org.springframework.context.support.ClassPathXmlApplicationContext; | |
− | + | ... | |
+ | public class NumerosFreeBoImplComponenteTest extends MockitoTestCase { | ||
+ | |||
+ | private BeanFactory beanFactory; | ||
+ | |||
+ | public void setUp() throws Exception { | ||
+ | ... | ||
+ | beanFactory = new ClassPathXmlApplicationContext("blah-spring-config.xml"); | ||
+ | .. | ||
+ | } | ||
+ | } | ||
</code> | </code> | ||
− | ==Ver también== | + | == Ver también == |
+ | * [[PropertiesConfiguration]] | ||
+ | * [[Configuracion De Spring]] | ||
* [[Obtener Variables De Entorno Con Spring]] | * [[Obtener Variables De Entorno Con Spring]] | ||
− | * [ | + | * [http://static.springsource.org/spring/docs/2.5.6/reference/beans.html#beans-factory-extension-factory-postprocessors Manual de Spring, Capitulo 3: Factory Post Processors] |
− | + | * [http://static.springframework.org/spring/docs/2.0.x/api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html Javadoc de PropertyPlaceholderConfigurer] | |
− | * [http://static.springframework.org/spring/docs/ | + | |
+ | [[Categoría:Spring Framework]] |
Revisión actual del 12:54 26 ene 2012
La clase org.springframework.beans.factory.config.PropertyPlaceholderConfigurer de Spring Framework nos permite hacer referencia a propiedades de archivos de texto en la configuración de Spring. De esta manera podemos externalizar ciertos valores a un archivo .properties de texto. Además, esta clase nos permite Obtener Variables De Entorno Con Spring.
Contenido
La clase PropertyPlaceholderConfigurer
PropertyPlaceholderConfigurer se usa para externalizar valores de propiedades de la definición de un bean, en un archivo separado con formato de Java Properties. Esto resulta muy útil para que la persona que despliega la aplicación pueda configurar en este archivo valores específicos del entorno (por ejemplo, URLs de base de datos, nombres de usuario y contraseñas, etc.) de forma simple, sin la complejidad de modificar una definición en XML.
Además, es muy facil tener varias "versiones" de este archivo properties, una para cada ambiente en donde se despliegue la aplicación (desarrollo, testing, producción, etc.).
Ejemplo
Podemos considerar el siguiente archivo de configuración, en donde se declara un bean DataSource cuyos atributos están externalizados. Luego se completan estos valores en un archivo .properties externo. En tiempo de ejecución se reemplazarán los valores del XML con los valores correspondientes del archivo de properties.
El tag context:property-placeholder se encarga de hacer referencia al archivo de propiedades que Spring usará para completar las referencias.
El archivo de Spring XML sería:
<?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:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:property-placeholder location="classpath:conf.properties"/>
<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>
</beans>
El archivo de propiedades conf.properties podría ser:
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:hsql://production:9002
jdbc.username=sa
jdbc.password=root
Ubicando conf.properties fuera del classpath
Es posible ubicar el archivo de propiedades fuera del classpath, en cualquier lugar del sistema de archivos. Por ejemplo, si el archivo de configuración se encuentra en /var/conf/conf.properties deberemos escribir:
<context:property-placeholder location="file:///var/conf/conf.properties"/>
Instanciando un BeanFactory en los tests
Para instanciar un BeanFactory para utilizar en los tests, es necesario que lea los archivos de properties. Para esto se utiliza la fábrica de beans ClassPathXmlApplicationContext, ej:
import org.springframework.context.support.ClassPathXmlApplicationContext;
...
public class NumerosFreeBoImplComponenteTest extends MockitoTestCase {
private BeanFactory beanFactory;
public void setUp() throws Exception { ... beanFactory = new ClassPathXmlApplicationContext("blah-spring-config.xml"); .. }
}