que - spring container java
¿Puedo inyectar propiedades de Maven(contraseñas definidas en settings.xml) en mi contenedor de Spring? (3)
Defino las contraseñas de los servidores a través de las propiedades que defino en mi ~ / .m2 / settings.xml (aunque podría estar en cualquier lugar, incluido pom.xml) para mi complemento de implementación. Me gustaría usar las mismas propiedades para mis pruebas de integración. ¿Hay una manera de hacerlo?
Si no es así, ¿hay alguna forma conveniente de compartir propiedades entre Maven y TestNG?
Quiero escribir un buen conjunto de pruebas que pueda ejecutarse en diferentes servidores de integración continua, apuntando a diferentes hosts remotos (desarrollo, pruebas, organización y producción), sin modificación del código.
Estoy definiendo credenciales para un servicio remoto en settings.xml:
<properties>
<my.host>http://my.company.com</my.host>
<my.username>my-un</my.username>
<my.password>my-pw</my.password>
</properties>
Me gustaría poder hacer referencia a las propiedades en mis pruebas de unidad / integración (src / test / resources) usando:
<?xml version="1.0" encoding="UTF-8"?>
<beans....
<bean class="java.lang.String" id="un">
<constructor-arg value="${my.username}"/>
</bean>
<bean class="java.lang.String" id="pw">
<constructor-arg value="${my.password}"/>
</bean>
</beans>
¿Hay alguna opción para hacer esto? ¿Alguien más ha intentado esto antes? Estoy escribiendo muchas pruebas REST que requieren autorización en mis pruebas.
¡Gracias!
Bueno, @seanizer está en el camino correcto, pero esto puede simplificarse ya que ya puede configurar sus propiedades en maven. Colóquelos en su pom y en su configuración de Spring, todo lo que necesita hacer es obtener acceso a ellos, así que simplemente cambiando su configuración de esta manera logrará eso.
<beans....
<context:property-placeholder />
<bean class="java.lang.String" id="un">
<constructor-arg value="${my.username}"/>
</bean>
<bean class="java.lang.String" id="pw">
<constructor-arg value="${my.password}"/>
</bean>
</beans>
La ubicación no es necesaria, ya que las propiedades en las que está interesado ahora están configuradas como propiedades del sistema por maven. El PropertyPlaceholderConfigurer trabajará con aquellos, así como con cualquier otro que esté definido en un archivo, lo que no se requiere en este caso específico. Tenga en cuenta que tendrá que incluir el esquema para el contexto .
Sin embargo, me gustaría moverlos de su ubicación actual, ya que es un entorno global, su pom es específico del proyecto, así que creo que es a donde pertenece.
Por supuesto. El filtrado de recursos de Maven es el camino a seguir.
Aquí hay una configuración de muestra (los archivos que coincidan con *-context.xml
se filtrarán, otros no):
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*-context.xml</include>
</includes>
</resource>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
<excludes>
<exclude>**/*-context.xml</exclude>
</excludes>
</resource>
</resources>
</build>
Un enfoque diferente sería utilizar el complemento de propiedades de Maven para escribir todas las propiedades del proyecto en un archivo y hacer referencia a ese archivo de Spring mediante el mecanismo PropertyPlaceholderConfigurer
.
Configuración de Maven:
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>properties-maven-plugin</artifactId>
<version>1.0-alpha-2</version>
<executions>
<execution>
<phase>generate-test-resources</phase>
<goals>
<goal>write-project-properties</goal>
</goals>
<configuration>
<outputFile>${project.build.testOutputDirectory}/mavenproject.properties</outputFile>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
Configuración de la primavera:
<context:property-placeholder location="classpath:mavenproject.properties"/>
Puede hacer que Maven sustituya un valor particular en su archivo xml cuando maven genere su proyecto con un perfil determinado. Así, por ejemplo, usted configuraría un archivo de prueba en su maven pom y cuando construya con ese perfil, el archivo xml en su jar tendrá la propiedad deseada. Mira this para un ejemplo.