Diferencia entre revisiones de «PropertyPlaceholderConfigurer»

De Dos Ideas.
Saltar a: navegación, buscar
(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…')
 
Línea 1: Línea 1:
[[Category:Spring Framework]]
+
La clase ''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.
Dependiendo el tipo de aplicación y entorno, la configuración del contexto de [[Spring Framework]] varia.  
 
  
==Aplicaciones web==
+
== La clase PropertyPlaceholderConfigurer ==
En las aplicaciones web, Spring puede configurarse de manera muy simple a través de un Listener o un Servlet.
 
  
En el archivo ''web.xml'' se agrega la variable de contexto ''contextConfigLocation'', la cual apunta a los archivos de configuración. Luego, puede utilizarse el listener ''ContextLoaderListener'' o el servlet ''ContextLoaderServlet'' (ambos provistos por el framework) para que inicialicen el contexto de Spring.
+
''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:
  
===Configuración usando ContextLoaderListener===
 
 
<code xml>
 
<code xml>
<web-app>
+
<?xml version="1.0" encoding="UTF-8"?>
    <context-param>
+
<beans xmlns="http://www.springframework.org/schema/beans"
        <param-name>contextConfigLocation</param-name>
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        <param-value>
+
xmlns:context="http://www.springframework.org/schema/context"
            classpath:archivoDeSpring1.xml,
+
xsi:schemaLocation="http://www.springframework.org/schema/beans
            classpath:archivoDeSpring2.xml
+
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        </param-value>
+
http://www.springframework.org/schema/context
    </context-param>
+
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
+
 
    <listener>
+
<context:property-placeholder location="classpath:conf.properties"/>
        <listener-class>
+
 
            org.springframework.web.context.ContextLoaderListener
+
<bean id="dataSource" destroy-method="close" class="org.apache.commons.dbcp.BasicDataSource">
        </listener-class>
+
    <property name="driverClassName" value="${jdbc.driverClassName}"/>
     </listener>
+
    <property name="url" value="${jdbc.url}"/>
</web-app>
+
    <property name="username" value="${jdbc.username}"/>
 +
     <property name="password" value="${jdbc.password}"/>
 +
</bean>
 +
 
 +
</beans>
 
</code>
 
</code>
  
===Obtención del contexto===
+
El archivo de propiedades ''conf.properties'' podría ser:
Con el contexto configurado, se utiliza la clase ''WebApplicationContextUtils'' para acceder al contexto de Spring.
+
<code ini>
<code java>
+
jdbc.driverClassName=org.hsqldb.jdbcDriver
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(servletContext);
+
jdbc.url=jdbc:hsqldb:hsql://production:9002
FooBean foo = (FooBean) context.getBean("fooBean");
+
jdbc.username=sa
 +
jdbc.password=root
 
</code>
 
</code>
  
==Ver también==
+
=== Ubicando conf.properties fuera del classpath ===
* [[Obtener Variables De Entorno Con Spring]]
+
 
* [[PropertyPlaceholderConfigurer De Spring]]
+
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:
* [[Buenas Practicas De Configuracion De Spring]]
+
 
* [http://static.springframework.org/spring/docs/1.2.x/api/org/springframework/web/context/support/WebApplicationContextUtils.html Javadoc de WebApplicationContextUtils]
+
<code xml>
 +
<context:property-placeholder location="file:///var/conf/conf.properties"/>
 +
</code>
 +
 
 +
== Ver también ==
 +
* [[Configuracion De 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]
 +
 
 +
[[Categoría:Spring Framework]]

Revisión del 15:13 31 ago 2009

La clase 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.

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

Ver también