Définition du profil actif et de l'emplacement de configuration à partir de la ligne de commande dans spring boot
J'ai une application spring boot.
J'ai trois profils dans mon application-> développement, mise en scène et production. J'ai donc 3 fichiers
- développement d'applications.yml
- application-mise en scène.yml
- l'application de production.yml
Mon application.yml réside dans src/main/resources
. J'ai défini le profil actif dans l'application.yml comme :
spring:
profiles.active: development
Les 3 autres fichiers de configuration spécifiques au profil sont présents dans le dossier C:\config
.
J'utilise le plugin gradle pour eclipse. Lorsque j'essaie de faire un" bootRun ", je définis les arguments de ligne de commande dans ma configuration gradle dans eclipse comme
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config
Cependant, la propriété de ligne de commande ne se reflète pas et mon profil actif est toujours défini comme développement(qui est celui que j'ai mentionné dans les applications.fichier yml). Aussi C:\Config le dossier n'est pas recherché pour les fichiers de configuration spécifiques au profil.
Je pense qu'il me manque quelque chose ici. J'ai essayé de le comprendre au cours des 2 derniers jours. Mais pas de chance. Je serais vraiment reconnaissant de toute aide.
8 answers
Il existe deux façons différentes d'ajouter/remplacer les propriétés spring sur la ligne de commande.
Option 1: Propriétés du système Java (Arguments VM)
Il est important que les paramètres-D soient avant votre application.pot sinon, ils ne sont pas reconnus.
java -jar -Dspring.profiles.active=prod application.jar
Option 2: Arguments du programme
java -jar application.jar --spring.profiles.active=prod --spring.config.location=c:\config
J'ai dû ajouter ceci:
bootRun {
String activeProfile = System.properties['spring.profiles.active']
String confLoc = System.properties['spring.config.location']
systemProperty "spring.profiles.active", activeProfile
systemProperty "spring.config.location", "file:$confLoc"
}
Et maintenant bootRun récupère les emplacements de profil et de configuration.
Merci beaucoup @jst pour le pointeur.
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config
N'est pas correct.
Devrait être:
--spring.profiles.active=staging --spring.config.location=C:\Config
Vous pouvez utiliser la ligne de commande suivante:
java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar
Je pense que votre problème est probablement lié à votre printemps.config.emplacement ne terminant pas le chemin avec"/".
Citer les documents
Si le printemps.config.location contient des répertoires (par opposition aux fichiers), ils doivent se terminer par / (et seront ajoutés avec les noms générés à partir de spring.config.name avant d'être chargé).
Lors de la définition du profil via le plugin Maven vous devez le faire via run.jvmArguments
mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"
Avec l'option de débogage:
mvn spring-boot:run -Drun.jvmArguments="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Dspring.profiles.active=jpa"
J'ai vu ce voyage beaucoup de gens..j'espère que cela aide
Il existe un autre moyen en définissant la variable OS, SPRING_PROFILES_ACTIVE.
, Par exemple :
SPRING_PROFILES_ACTIVE=dev gradle clean bootRun
La réponse de Michael Yin est correcte mais une meilleure explication semble nécessaire!
Beaucoup d'entre vous ont mentionné que -D
est la bonne façon de spécifier les paramètres JVM et vous avez absolument raison. Mais Michael a également raison comme mentionné dans la documentation Spring Boot Profiles .
Ce qui n'est pas clair dans la documentation, c'est de quel type de paramètre il s'agit: --spring.profiles.active
n'est pas un paramètre JVM standard, donc si vous voulez l'utiliser dans votreE, remplissez les champs corrects (c'est-à-dire le programme arguments)