web-dev-qa-db-fra.com

Définition du profil actif et de l'emplacement de configuration à partir de la ligne de commande au démarrage du printemps

J'ai une application de démarrage de printemps.

J'ai trois profils dans mon application-> développement, mise en scène et production. Donc j'ai 3 fichiers

  1. application-development.yml
  2. application-staging.yml
  3. application-production.yml

Mon application.yml réside dans src/main/resources. J'ai défini le profil actif dans application.yml comme suit:

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 configure les arguments de ligne de commande dans la configuration de gradle dans Eclipse en tant que

 -Dspring.profiles.active=staging -Dspring.config.location=C:\Config

Cependant, la propriété de ligne de commande n'est pas reflétée et mon profil actif est toujours défini comme développement (qui est celui que j'ai mentionné dans le fichier applications.yml). De plus, le dossier C:\Config n'est pas recherché dans les fichiers de configuration spécifiques à un profil.

Je pense que je manque quelque chose ici. J'essaie de comprendre cela depuis 2 jours. Mais pas de chance. J'apprécierais vraiment toute aide.

116
O-OF-N

Je devais 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.

15
O-OF-N

Vous pouvez ajouter/remplacer des propriétés de ressort de deux manières différentes en ligne de commande.

Option 1: Java Propriétés système (arguments de la machine virtuelle)

Il est important que les paramètres -D soient avant votre application.jar 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
243
RenRen
-Dspring.profiles.active=staging -Dspring.config.location=C:\Config

n'est pas correcte.

devrait être:

--spring.profiles.active=staging --spring.config.location=C:\Config
10
Michael Yin

vous pouvez utiliser la ligne de commande suivante:

Java -jar -Dspring.profiles.active=[yourProfileName] target/[yourJar].jar
8
Rollen Holt

Il existe un autre moyen de définir la variable OS, SPRING_PROFILES_ACTIVE .

pour par exemple:

SPRING_PROFILES_ACTIVE=dev gradle clean bootRun

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

7
Rothin Sen

Lors de la configuration 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 jusqu'à .. espérons que cela aide

7
JARC

Ma meilleure pratique consiste à définir cela comme un argument VM "-D". Veuillez noter les différences entre les bottes à ressort 1.x et 2.x.

Les profils à activer peuvent être spécifiés sur la ligne de commande:

Spring-Boot 2.x

-Dspring-boot.run.profiles=local

Spring-Boot 1.x

-Dspring.profiles.active=local

exemple d'utilisation avec maven:

Spring-Boot 2.x

mvn spring-boot:run -Dspring-boot.run.profiles=local

Spring-Boot 1.x

mvn spring-boot:run -Dspring.profiles.active=local

Assurez-vous de les séparer par une virgule pour plusieurs profils:

mvn spring-boot:run -Dspring.profiles.active=local,foo,bar
mvn spring-boot:run -Dspring-boot.run.profiles=local,foo,bar
4
Sma Ma

Je pense que votre problème est probablement lié au fait que votre spring.config.location ne termine pas le chemin avec "/".

Citer les docs

Si spring.config.location contient des répertoires (par opposition à des fichiers), ceux-ci doivent se terminer par/(et seront ajoutés aux noms générés à partir de spring.config.name avant d'être chargés).

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

3
jst

La réponse de Michael Yin est correcte mais une meilleure explication semble être requise!

Beaucoup d'entre vous ont mentionné que -D est la manière correcte de spécifier les paramètres de la machine virtuelle Java et vous avez absolument raison. Mais Michael a également raison, comme mentionné dans la documentation Spring Boot Profiles .

La nature de ce paramètre n’est pas claire: --spring.profiles.active n’est pas un paramètre JVM standard, donc si vous souhaitez l’utiliser dans votre IDE remplissez les champs appropriés (c.-à-d. arguments du programme)

2
Eric Taix