Spring Boot Maven Plugin y los profiles

Es habitual en los proyectos empresariales tener varios entornos y en ese escenario los perfiles de maven son de gran ayuda, ya que nos permite generar el "entregable" para cada entorno de forma cómoda.
Esencialmente los profiles de maven sirven para definir unos grupos de valores específicos para cada entorno. Cuando hacemos un "mvn package" no es problema controlar desde consola o desde el un IDE como eclipse que se realice según un perfil apropiado.
Si es un  proyecto web con spring-boot nos encontraremos con un problema: el plugin de spring-boot no realiza la transformación de valores. Si por ejemplo tiene que trasladar unos valores a un archivo properties no lo hace. Esto no es problema para realizar los empaquetados de integración, consolidación o producción, pero si lo es para desarrollo en que estamos acostumbrados a formas rápidas de lanzarlo con tomcat:run, spring-boot:run o jetty:run
La primera opción puede ser lanzarlo con tomcat:run según los pasos indicados en esta entrada ya que ese comando si que realiza la conversión de valores.
Puedo tener para desarrollo esta entrada en un archivo properties:
server.port=${localport}
Es una mera prueba de concepto en que indico via archivo de properties en que puerto debe desplegar el embebido,ya que la propiedad "server.port" se utiliza para configurar el plugin".

Y tener una propiedad el profile de desarrollo:
        <profile>
            <id>local</id>
            <properties>
                <localport>8888</localport>
            </properties>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
        </profile>

Para el resto de profiles en los que generamos el empaquetado funcionará correctamente y desplegando con tomcat7:run también.
(Sé que es un poco absurdo el ejemplo, pues la propiedad que seteo es el puerto que utiliza el tomcat embebido de spring-boot y realmente desplegaré en el puerto que tenga configurado en el plugin del tomcat, por defecto el 8080).
Ahora bien, si no deseamos utilizar el plugin de tomcat y seguir utilizando spring-boot plugin y lanzar en desarrollo la aplicación con spring-boot:run tendremos que forzar que llegue el valor al archivo properties para que la variable localport tenga valor.
Entonces podemos indicarlo en el goal o en linea de comandos con :
spring-boot:run -Dlocalport=8888 
El pom completo de este proyecto, con los perfiles definidos en el propio proyecto:
Particularment me gusta más la opción de desplegar sobre el tomcat porque me parece una forma mucho más uniforme de generar lo que se despliega y sobre todo ya me conozco la configuración de ese plugin. La segúnda opción, pasando los valores "en linea de comandos", me parece útil para pruebas rápidas y/o una forma rápida de escribir ( o sobreescribir)  valores de los perfiles.

Enlaces relacionados: Introducción a los profiles de maven  y  Spring- Cómo crear un war file

Comentarios