web-dev-qa-db-fra.com

Comment activer un profil Spring Boot lors de l'exécution d'IntelliJ?

J'ai 5 environnements:

 - local (my development machine)
 - dev
 - qc
 - uat
 - live
 - staging

Je souhaite utiliser différentes propriétés d'application pour chaque environnement. Je dispose donc des fichiers de propriétés suivants, chacun ayant une URL différente pour la source de données:

 - application.properties  (containing common properties)
 - application-local.properties
 - application-dev.properties
 - application-qc.properties
 - application-uat.properties
 - application-live.properties

J'utilise IntelliJ et j'exécute mon application à l'aide de bootRun dans le plugin Gradle sur mon ordinateur local. J'utiliserai le déploiement du même fichier war d'application sur tous les autres environnements exécutant Tomcat.

J'ai essayé d'ajouter: 

--spring.profiles.active = local

à la configuration d'exécution sous paramètres de script.

J'ai essayé d'ajouter 

-Dspring.profiles.active = local

à la configuration d'exécution sous les options VM.

Ni travail. Je continue à voir le message INFO au démarrage, par exemple: Pas de profil actif, retour aux profils par défaut: défaut

Si je lance mon application depuis la ligne de commande Windows en utilisant 

gradle bootRun

mais je commence par définir la variable d'environnement 

set SPRING_PROFILES_ACTIVE=local

Ensuite, tout fonctionne.

Ma question est donc la suivante: comment activer mon profil de démarrage local lors de l’exécution de bootRun à partir d’IntelliJ?

61
dleerob

Je suis allé dans Edit Configurations ...

J'ai ajouté -Dspring.profiles.active=test à VM Options, puis j'ai réexécuté cette configuration. Cela a fonctionné parfaitement.

79
Thom

Si vous utilisez réellement des configurations d'exécution à l'amorçage printanier (actuellement uniquement prises en charge dans Ultimate Edition), il est facile de préconfigurer les profils dans le paramètre "Profils actifs".

 enter image description here

54
Daniel Bubenheim

J'ai fini par ajouter ce qui suit à mon build.gradle:

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

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

Alors maintenant, lors de l'exécution de bootRun à partir d'IntelliJ, le profil "local" est utilisé par défaut.

Sur nos autres environnements, nous allons simplement définir la variable d'environnement 'SPRING_PROFILES_ACTIVE' dans Tomcat.

Je l'ai eu d'un commentaire trouvé ici: https://github.com/spring-projects/spring-boot/pull/592

6
dleerob

Une cause probable pourrait être que vous ne transmettez pas les paramètres de ligne de commande à la méthode principale des applications. J'ai commis la même erreur il y a quelques semaines.

public static final void main(String... args) {
    SpringApplication.run(Application.class, args);
}
5
Hubert Ströbitzer

J'utilise Intellij Community Edition . Allez dans "Configurations Exécuter/Déboguer"> onglet Runner> Variables d'environnement> cliquez sur le bouton "...". Ajouter: SPRING_PROFILES_ACTIVE = local

spring.profiles.active

2
Ryan Wibawa

Essayez d'ajouter cette commande dans votre build.gradle

 enter image description here

Donc pour exécuter configurer cette forme:

 enter image description here

1
emerson moura

Spring Boot semble avoir changé la façon de lire les options VM au fur et à mesure de son évolution. Voici un moyen d'essayer lorsque vous lancez une application dans Intellij et que vous souhaitez activer un profil:

1. Modifier les options VM

Ouvrez "Modifier la configuration" dans "Exécuter" et dans "Options de la machine virtuelle", ajoutez: -Dspring.profiles.active=local

Cela fonctionne réellement avec l'un de mes projets avec Spring Boot v2.0.3.RELEASE et Spring v5.0.7.RELEASE, mais pas avec un autre projet avec Spring Boot v2.1.1.RELEASE et Spring v5.1.3.RELEASE.

De plus, lors de l'exécution avec Maven ou JAR, les gens ont mentionné ceci:

mvn spring-boot:run -Drun.profiles=dev

ou 

Java -jar -Dspring.profiles.active=dev XXX.jar

(Voir ici: comment utiliser les profils de démarrage Spring )

2. Passer les arguments de la machine virtuelle Java

Il est mentionné quelque part que Spring modifie la manière de lancer le processus d’applications si vous spécifiez certaines options de la machine virtuelle Java; cela crée un autre processus et ne passera pas l'argument reçu, donc cela ne fonctionne pas. La seule façon de passer l'argument est la suivante:

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

Encore une fois, ceci est pour Maven . https://docs.spring.io/spring-boot/docs/current/maven-plugin/examples/run-debug.html

3. Réglage env var

Ce qui a fonctionné pour moi pour le second projet, était de définir la variable d'environnement, comme mentionné dans la réponse ci-dessus: "Editer la configuration" - "Variable d'environnement", et:

spring.profiles.active=local
0
WesternGun

Pour Spring Boot 2.1.0 et supérieur, vous pouvez utiliser

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

0
Mr. K.

Essaye ça. Modifiez votre fichier build.gradle comme suit.

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

Replace your profile name with BE

Vous pouvez essayer la méthode ci-dessus pour activer un profil

0
Amrit Malla