Tengo un archivo Maven settings.xml
en mi directorio ~/.m2
; se parece a esto:Usando las propiedades Maven settings.xml dentro del contexto Spring
<settings>
<profiles>
<profile>
<id>mike</id>
<properties>
<db.driver>org.postgresql.Driver</db.driver>
<db.type>postgresql</db.type>
<db.host>localhost</db.host>
<db.port>5432</db.port>
<db.url>jdbc:${db.type}://${db.host}:${db.port}/dbname</db.url>
</properties>
</profile>
</profiles>
<activeProfiles>
<activeProfile>mike</activeProfile>
</activeProfiles>
<servers>
<server>
<id>server_id</id>
<username>mike</username>
<password>{some_encrypted_password}</password>
</server>
</servers>
</settings>
Me gustaría utilizar estas propiedades el doble
- Una vez dentro de la fase de Maven
integration-test
de configurar y derribar mi base de datos. Usando el filtrado Maven, esto está funcionando perfectamente. - Una segunda vez cuando ejecuto mi aplicación Spring, lo que significa que necesito sustituir estas propiedades en mi archivo
servlet-context.xml
durante la faseresources:resources
de Maven. Para las propiedades en la sección superior desettings.xml
, como${db.url}
, esto funciona bien. No puedo encontrar la forma de sustituir mi nombre de usuario de base de datos y la contraseña (descifrada) en el archivo Springservlet-context.xml
.
La parte pertinente de mi archivo servlet-context.xml
parece:
<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"><value>${db.driver}</value></property>
<property name="url"><value>${db.url}</value></property>
<property name="username"><value>${username}</value></property>
<property name="password"><value>${password}</value></property>
</bean>
El objetivo final aquí es que cada desarrollador tiene su propia configuración de Maven (y base de datos en su propia máquina para pruebas de integración). ..Y una configuración similar en el servidor de Jenkins. No queremos compartir un nombre de usuario/contraseña/etc común.
Ese punto acerca de volver a compilar es válido. Definitivamente voy a tener que investigar eso más, ya que es un anti-patrón que espero evitar. Definitivamente necesita esto para ejecutarse en un estilo CI/CD. Pero, al mismo tiempo, intento volver a utilizar la información que ya existe y que está almacenada en la 'configuración.xml' – Mike
OK, es realmente bueno que va a refactorizar esto. Por ahora, como dije, use este filtrado de recursos web. Debería funcionar y permitirte tener esta configuración en un solo lugar, como dijiste. –
Spring 3.1 introdujo una carga de cosas nuevas para este tipo de escenario: http://blog.springsource.org/2011/02/15/spring-3-1-m1-unified-property-management/ – artbristol