Tengo 5 ambientes:
- local (my development machine)
- dev
- qc
- uat
- live
- staging
Quiero que se usen diferentes propiedades de aplicación para cada entorno, por lo que tengo los siguientes archivos de propiedades, cada uno con una URL diferente para el origen 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 ejecuto 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 bajo parámetros de script.
He intentado agregar
-Dspring.profiles.active = local
a la configuración de ejecución en las opciones de VM.
Ni trabajo. Sigo viendo el mensaje INFO en el inicio que dice: No hay un 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 configuré la variable de entorno
set SPRING_PROFILES_ACTIVE=local
Entonces todo funciona.
Entonces mi pregunta es, ¿cómo activo mi perfil de arranque de resorte local cuando ejecuto bootRun desde IntelliJ?
fuente
Respuestas:
Agregué
-Dspring.profiles.active=test
a VM Options y luego volví a ejecutar esa configuración. Funcionó perfectamente.Esto puede ser establecido por
Run | Edit Configurations...
Configuration
pestañaEnvironment
sección para revelarVM options
fuente
Si realmente utiliza las configuraciones de ejecución de arranque por resorte (actualmente solo se admite en la edición Ultimate), es fácil configurar previamente los perfiles en la configuración de "Perfiles activos".
fuente
args
en suApplication.main()
egSpringApplication.run( Application.class, args );
Intente agregar este comando en su build.gradle
Entonces, para ejecutar, configure esa forma:
fuente
Spring Boot parece haber cambiado la forma de leer las opciones de VM a medida que evoluciona. Aquí hay alguna forma de probar cuando inicia una aplicación en Intellij y desea activar algún perfil:
1. Cambiar las opciones de VM
Abra "Editar configuración" en "Ejecutar" y en "Opciones de VM", agregue:
-Dspring.profiles.active=local
Realmente funciona con un proyecto mío con
Spring Boot v2.0.3.RELEASE
ySpring v5.0.7.RELEASE
, pero no con otro proyecto conSpring Boot v2.1.1.RELEASE
ySpring v5.1.3.RELEASE
.Además, cuando se ejecutaba con Maven o JAR, la gente mencionaba esto:
o
(Ver aquí: cómo usar los perfiles Spring Boot )
2. Pasar args JVM
En alguna parte se menciona que Spring cambia la forma de iniciar el proceso de aplicaciones si especifica algunas opciones de JVM; bifurca otro proceso y no pasará el argumento que recibió, por lo que esto no funciona. La única forma de pasarle argumentos es:
De nuevo, 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 funcionó para el segundo proyecto fue establecer la variable de entorno, como se menciona en alguna respuesta anterior: "Editar configuración" - "Variable de entorno", y:
fuente
SPRING_PROFILES_ACTIVE
.~/.profile
o similar, debe usarloSPRING_PROFILES_ACTIVE
;spring.profiles.active
probablemente solo funcione como un argumento en la línea de comando.Terminé agregando lo siguiente a mi build.gradle:
Así que ahora, cuando ejecuta bootRun desde IntelliJ, el valor predeterminado es el perfil "local".
En nuestros otros entornos, simplemente configuraremos la variable de entorno 'SPRING_PROFILES_ACTIVE' en Tomcat.
Obtuve esto de un comentario encontrado aquí: https://github.com/spring-projects/spring-boot/pull/592
fuente
Una causa probable podría ser que no pase los parámetros de la línea de comandos al método principal de la aplicación. Cometí el mismo error hace algunas semanas.
fuente
Application
clase, así que lo hice a mano desde la memoria. Perdí elargs
paso y, por lo tanto, el cuadro "Perfiles activos" en la configuración de ejecución no funcionó, tuve que pasarlo manualmente-Dspring.profiles.active
en el cuadro de opciones de VM.Yo uso la Intellij Community Edition. Vaya a "Configuraciones de ejecución / depuración"> pestaña Ejecutador> Variables de entorno> haga clic en el botón "...". Añadir: SPRING_PROFILES_ACTIVE = local
spring.profiles.active
fuente
Para Spring Boot 2.1.0 y posterior puede usar
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
fuente
spring-boot:run -Dspring-boot.run.profiles=local
En mi caso, utilicé la configuración a continuación en las opciones de VM en
IntelliJ
, no estaba seleccionando las configuraciones locales, pero después de reiniciarIntelliJ
, seleccionó los detalles de configuraciónIntelliJ
y el servicio comenzó a ejecutarse.fuente
Prueba esto. Edite su archivo build.gradle de la siguiente manera.
fuente
Puedes probar la forma anterior para activar un perfil
fuente
Establecer
-Dspring.profiles.active=local
bajo argumentos del programa.fuente