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?
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.
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
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);
}
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 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:
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 )
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
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
Pour Spring Boot 2.1.0 et supérieur, vous pouvez utiliser
mvn spring-boot:run -Dspring-boot.run.profiles=foo,bar
Essaye ça. Modifiez votre fichier build.gradle comme suit.
ext { profile = project.hasProperty('profile') ? project['profile'] : 'local' }