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

  1. développement d'applications.yml
  2. application-mise en scène.yml
  3. 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.

Author: O-OF-N, 2015-06-25

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
 132
Author: RenRen, 2017-11-08 15:12:37

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.

 13
Author: O-OF-N, 2015-06-25 18:12:38
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config

N'est pas correct.

Devrait être:

--spring.profiles.active=staging --spring.config.location=C:\Config
 9
Author: Michael Yin, 2016-01-26 00:43:31

Vous pouvez utiliser la ligne de commande suivante:

java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar
 7
Author: Rollen Holt, 2016-06-17 02:31:03

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é).

Http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#boot-features-external-config-application-property-files

 3
Author: jst, 2015-06-25 00:17:35

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

 2
Author: JamesC, 2017-01-31 15:06:03

Il existe un autre moyen en définissant la variable OS, SPRING_PROFILES_ACTIVE.

, Par exemple :

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

Référence: Comment définir les profils de ressort actifs

 2
Author: Rothin Sen, 2017-05-16 11:23:36

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)

 1
Author: Eric Taix, 2018-05-01 06:26:48