¿Cómo activo un perfil Spring Boot cuando ejecuto desde IntelliJ?
Tengo 5 ambientes:
- local (my development machine)
- dev
- qc
- uat
- live
- staging
Quiero que se utilicen diferentes propiedades de la aplicación para cada entorno, por lo que tengo los siguientes archivos de propiedades, cada uno de los cuales tiene una URL diferente para la fuente de datos:
- application.properties (containing common properties)
- application-local.properties
- application-dev.properties
- application-qc.properties
- application-uat.properties
- application-live.properties
Estoy usando IntelliJ y ejecutando mi aplicación usando bootRun en el complemento Gradle en mi máquina local. Usaré la implementación del mismo archivo war de aplicación en todos los demás entornos que ejecutan Tomcat.
He intentado agregar:
--spring.profiles.active=local
a la configuración de ejecución en los parámetros del script.
He intentado agregar
-Dspring.profiles.active=local
a la configuración de ejecución en las opciones de VM.
Ninguno de los dos funciona. Sigo viendo el mensaje INFORMACIÓN al inicio que dice: No hay ningún perfil activo establecido, volviendo a los perfiles predeterminados: predeterminado
Si ejecuto mi aplicación desde la línea de comandos de Windows usando
gradle bootRun
pero primero configuro la variable de entorno
set SPRING_PROFILES_ACTIVE=local
Entonces todo funciona.
Entonces mi pregunta es, ¿cómo activo mi perfil de arranque de primavera local cuando ejecuto bootRun desde IntelliJ?
Agregué -Dspring.profiles.active=test
a VM Options y luego volví a ejecutar esa configuración. Funcionó perfectamente.
Esto se puede configurar mediante
- Eligiendo
Run | Edit Configurations...
- Ir a la
Configuration
pestaña - Expande la
Environment
sección para revelarVM options
Si realmente utiliza las configuraciones de ejecución de Spring Boot (actualmente solo se admiten en Ultimate Edition), es fácil preconfigurar los perfiles en la configuración "Perfiles activos".
Probado con IntelliJ Community edición 2021.x
Puede crear varias configuraciones, una para un perfil específico. En mi caso a continuación, he creado una configuración de desarrollo con la variable de entorno del perfil de desarrollo.
- Ir a Ejecutar > Editar configuración
- Elija la configuración que desea editar, a la izquierda debajo de Aplicación.
- En el lado derecho > En Variable de entorno, actualice
spring.profiles.active=<your profile name>
el ejemplospring.profiles.active=dev
(observador: la variable debe estar sin el indicador -D)- Guarde los cambios y ejecute la aplicación Spring Boot con la misma configuración.
Nota: – También puede crear una nueva configuración o copiar la existente en el paso 2 anterior, utilizando la opción disponible en el mismo panel.
Spring Boot parece haber cambiado la forma de leer las opciones de VM a medida que evoluciona. A continuación se muestra una forma de probar cuando inicia una aplicación en Intellij y desea activar algún perfil:
1. Cambiar las opciones de la máquina virtual
Abra "Editar configuración" en "Ejecutar" y en "Opciones de VM", agregue:-Dspring.profiles.active=local
En realidad, funciona con un proyecto mío con Spring Boot v2.0.3.RELEASE
y Spring v5.0.7.RELEASE
, pero no con otro proyecto con Spring Boot v2.1.1.RELEASE
y Spring v5.1.3.RELEASE
.
Además, cuando se ejecuta con Maven o JAR, la gente menciona esto:
mvn spring-boot:run -Drun.profiles=dev
o
java -jar -Dspring.profiles.active=dev XXX.jar
(Ver aquí: cómo usar los perfiles Spring Boot )
2. Pasar argumentos de JVM
Se menciona en alguna parte que Spring cambia la forma de iniciar el proceso de aplicaciones si especifica algunas opciones de JVM; bifurca otro proceso y no pasa el argumento que recibió, por lo que esto no funciona. La única forma de pasarle argumentos es:
mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."
Nuevamente, esto es para Maven. https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html
3. Configuración (aplicación) env var
Lo que me funciona para el segundo proyecto fue configurar la variable de entorno, como se menciona en alguna respuesta anterior: "Editar configuración" - "Variable de entorno" y:
SPRING_PROFILES_ACTIVE=local
Intente agregar este comando en su build.gradle
Entonces, para ejecutar, configure esa forma: