Una forma sencilla de hacer esto es emplear los filter de maven. Su uso más extendido es el aplicado a los resources de la aplicación, pero también se pueden emplear en el webapp de las aplicaciones web.
En este ejemplo se va a cambiar un parámetro dentro del applicationContext.xml de Spring. Esto también se puede hacer empleando el Expresion Language de Spring y el conf.properties, aunque aquí se hará con filters Maven.
Necesitamos:
- Uno o mas profiles donde indicar el fichero que contendrá las variables
- Añadir la sección de filters indicando qué fichero emplear
- Plugin de resources
- Configurar war plugin para filtrar el webapp
- Emplear la variable en el applicationContext
En el pom.xml declaramos los profiles, en los que se especifica en qué ruta está el fichero que contiene las variables a sustituir:
<profiles>
<!-- Development environment -->
<profile>
<id>development</id>
<activation>
<activeByDefault>true</activeByDefault>
</activation>
<properties>
<filters.ficheroProperties>src/dev/filters/desarrollo- env.properties</filters.ficheroProperties>
</properties>
</profile>
</profiles>
Esto simplemente declara la variable filters.ficheroProperties con el src/dev/filters/desarrollo-env.properties, cuando se emplee el profile devolpment (en este caso es por defecto). Aquí se añadiría un profile por cada entorno y a la hora de generar los wars habría que usar el parámetro -P referenciando el que correspondiese.
Este fichero será un properties corriente:
mavenProperty.jdbc = jdbc/miDatasource
Dentro del apartado de build, se declaran el fichero que contiene las variables de filtrado. Es aquí donde se usa la variable declarada en el profile, a fin de que cambie en cada entorno.
<!-- Se le indica de qué ficheros se obtienen los valores de las variables que se reemplazan -->
<filters>
<filter>${filters.ficheroProperties}</filter>
</filters>
En el apartado de plugins, se añade el maven-resources-plugin:
<!-- Plugin para gestionar los resources y el filtrado -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>2.4.3</version>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
También en el apartado de plugins, se añade configuración extra al maven-war-plugin:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<!-- Configurar filtrado de ficheros dentro del webapp -->
<webResources>
<resource>
<filtering>true</filtering>
<directory>src/main/webapp/WEB-INF</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
</webResources>
</configuration>
</plugin>
En este último plugin se indica que se van a filtrar los recursos dentro de WEB-INF cuya extensión sea .xml. De este modo, a la hora de componer el war se van a leer todos los ficheros xml de este directorio buscando variables Maven para reemplazar.
Por último, basta con emplear las variables declaradas en el fichero de properties dentro del applicationContext.xml
<bean id="dataSource" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="${mavenProperty.jdbc}" />
</bean>
No hay comentarios:
Publicar un comentario