¿Cómo activo un perfil de Spring Boot cuando ejecuto desde IntelliJ?

133

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?

dleerob
fuente
1
¿Por qué está ejecutando la aplicación a través de gradle allí? ¿No sería 10 veces más conveniente usar la configuración de ejecución? Hay un campo donde puede configurar los perfiles para habilitar ...
Stephane Nicoll
Estoy usando la configuración de ejecución en IntelliJ, como se explicó anteriormente. No funciona.
dleerob
2
No tu no eres. De lo que estoy hablando es de la "Configuración de ejecución de Spring Boot" Ejecutar -> Editar configuración> Nuevo> Spring Boot.
Stephane Nicoll
Ah, sí, me alejé de la configuración de ejecución de Spring Boot ya que necesitaba expandir project.properties a application.properties en mi build.gradle y si utilicé la configuración de ejecución de Spring Boot, no parecía funcionar. Voy a mirar en la resolución de esta cuestión y entonces tal vez simplemente puede utilizar el campo de perfil activo como usted sugiere
dleerob
1
Usar la configuración Spring Boot parece más problemático de lo que vale. El 'Make' simplemente copia a través de los recursos y no los filtra / altera según el script de compilación. Luego decirle que ejecute la 'compilación' desde gradle en lugar de 'hacer' simplemente hace que la ejecución se congele. Si uso bootRun en su lugar, junto con mi entrada de entorno según la respuesta a continuación, todo funciona bien.
dleerob

Respuestas:

194

Agregué -Dspring.profiles.active=testa VM Options y luego volví a ejecutar esa configuración. Funcionó perfectamente.

Esto puede ser establecido por

  • Elegir Run | Edit Configurations...
  • Ir a la Configurationpestaña
  • Expande la Environmentsección para revelarVM options
Thom
fuente
Estaba atrapado en la misma situación pero para un proyecto Maven. Gracias por la ayuda. Hemos configurado la opción VM para cada archivo de prueba.
Sri9911
2
A mí tampoco me funciona. Uso gradle y dos módulos (api y ui)
Virkom
1
Tampoco funciona para mí, también usando gradle aquí.
IARI
Hola, tengo el mismo problema, pero esta solución no soluciona el problema. ¿Qué se entiende aquí por reran la configuración? ¿Es tan simple como volver a ejecutar la tarea?
user1456110
Ejecuté esa prueba en particular después de editarla como se muestra.
Thom
82

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".

ingrese la descripción de la imagen aquí

Daniel Bubenheim
fuente
1
Gracias, estoy seguro de que esto funcionaría, sin embargo, no estoy usando la configuración de ejecución de Spring Boot, estoy usando la configuración de ejecución de Gradle que no tiene el campo "Perfiles activos". My Gradle Build filtra y modifica algunos de los archivos de propiedades que copia al directorio de construcción, por lo que estoy usando la configuración de ejecución de Grade para esto.
dleerob
Como señaló una respuesta anterior: si esto no funciona para usted, asegúrese de que está pasando argsen su Application.main()egSpringApplication.run( Application.class, args );
Xaero Degreaz
Esta característica solo se admite en la edición Ultimate.
Julien Malige
Gracias @JulienMalige por señalar esto. Editaré mi respuesta.
Daniel Bubenheim
11

Intente agregar este comando en su build.gradle

ingrese la descripción de la imagen aquí

Entonces, para ejecutar, configure esa forma:

ingrese la descripción de la imagen aquí

emerson moura
fuente
9

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.RELEASEy Spring v5.0.7.RELEASE, pero no con otro proyecto con Spring Boot v2.1.1.RELEASEySpring v5.1.3.RELEASE .

Además, cuando se ejecutaba con Maven o JAR, la gente mencionaba 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 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:

mvn spring-boot:run -Dspring-boot.run.jvmArguments="..."

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:

SPRING_PROFILES_ACTIVE=local
WesternGun
fuente
1
La env var debería serlo SPRING_PROFILES_ACTIVE.
Josh M.
Lo agregué en "Ejecutar configuración" de IDEA "Opciones de VM" como "spring.profiles.active" y funciona. ¿Quizás otra forma como urs se usa en todo el sistema en las propiedades del sistema?
WesternGun
Si lo está agregando ~/.profileo similar, debe usarlo SPRING_PROFILES_ACTIVE; spring.profiles.activeprobablemente solo funcione como un argumento en la línea de comando.
Josh M.
1
Ah ... entonces quieres decir lo mismo que sospechaba; env real del sistema, no solo la aplicación env. OK, hago una edición.
WesternGun
8

Terminé agregando lo siguiente a mi build.gradle:

bootRun {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "local"
}

test {
  environment SPRING_PROFILES_ACTIVE: environment.SPRING_PROFILES_ACTIVE ?: "test"
}

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

dleerob
fuente
6

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.

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}
Hubert Ströbitzer
fuente
Gracias por la respuesta y sugerencia, sin embargo, estoy pasando los argumentos.
dleerob
Esto realmente solucionó mi problema. Por alguna razón, cuando creé el proyecto usando Gradle, no generó automáticamente mi Applicationclase, así que lo hice a mano desde la memoria. Perdí el argspaso y, por lo tanto, el cuadro "Perfiles activos" en la configuración de ejecución no funcionó, tuve que pasarlo manualmente -Dspring.profiles.activeen el cuadro de opciones de VM.
Xaero Degreaz
3

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

Ryan Wibawa
fuente
3

Para Spring Boot 2.1.0 y posterior puede usar

mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar

Sr. K.
fuente
2
En su línea de comando estaráspring-boot:run -Dspring-boot.run.profiles=local
Sr. K.
con spring-boot: ejecuta esta es la respuesta
kakabali
2

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 reiniciar IntelliJ, seleccionó los detalles de configuración IntelliJy el servicio comenzó a ejecutarse.

-Dspring.profiles.active=local
usuario2293536
fuente
0

Prueba esto. Edite su archivo build.gradle de la siguiente manera.

ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }
sudoz
fuente
0

Reemplace su nombre de perfil con BE

Puedes probar la forma anterior para activar un perfil

Amrit Malla
fuente
-3

Establecer -Dspring.profiles.active=localbajo argumentos del programa.

jwenting
fuente
He eliminado las citas de mi pregunta anterior. En realidad no estoy usando comillas, solo estaba tratando de mostrar exactamente lo que estaba poniendo en los campos de configuración de ejecución
dleerob
55
te refieres a las opciones de VM!
Michail Michailidis
¡Esta respuesta es muy engañosa ya que la aplicación no reconocerá los argumentos del programa!
yuranos
Esta respuesta no funcionará, como lo mencionaron otras personas, debería estar en Opciones de VM en IntelliJ Idea y no en los argumentos del programa
abstractKarshit