web-dev-qa-db-fra.com

Remplacements de printemps "spring.profiles.include"

Mon intention est d'avoir deux profils dans une application Spring Boot - développement et production. Le profil de développement est destiné uniquement à remplacer certaines variables du profil de production (comme la base de données en mémoire au lieu de la base de données dans le cloud). Comme je m'attends à ce que certaines modifications soient apportées au profil de production à l'avenir, la duplication des variables dans le profil de développement ne semble pas être une solution.

Donc, dans Spring Reference j'ai lu que spring.profiles.include est censé ajouter uniquement des propriétés à partir du profil référencé, mais d'après ce que j'ai vérifié, il le remplace plutôt. Ainsi, lorsque vous avez deux profils foo et bar, dans des fichiers yaml distincts:

application-foo.yaml:

myproperty: 44

application-bar.yaml:

spring:
  profiles:
    include: foo
    active: bar,foo
myproperty: 55

Et en définissant -Dspring.profiles.active=bar variable dans l'EDI, la valeur d'exécution de myproperty est 44. Cela signifie que bar, est remplacé par foo qui était censé uniquement ajouter des propriétés, mais pas remplacer leur. Au démarrage de l'application, j'obtiens:

Les profils suivants sont actifs: foo, bar

J'ai ajouté spring.profiles.active=bar à application-bar.yaml comme suggéré par cette réponse , dans une autre question, mais cela n'a aucun effet - il n'y a pas de différence lorsque la propriété est là ou non (j'ai également essayé d'utiliser une liste de tirets au lieu de valeurs séparées par des virgules).

Ma question est la suivante: comment fonctionne-t-il (alors Spring Reference est trompeur)? Si oui, existe-t-il des solutions pour cela?

Ajout d'un lien au code source de l'application sur un github.

12
Daniel Szymatowicz

Nous avons implémenté les profils actifs Spring d'une manière légèrement différente. Disons que le fichier de propriétés par défaut, application.yml, contient toutes les valeurs par défaut qui sont les mêmes dans les environnements de production et de développement.

Créez des propriétés distinctes pour les fichiers de production et de développement nommés application-prd.yml et application-dev.yml respectivement. Ces fichiers peuvent contenir des propriétés supplémentaires ou remplacer certaines des propriétés par défaut.

Lors du démarrage de l'application, nous transmettons le spring.profiles.active comme variable d'environnement. Par exemple,

-Dspring.profiles.active=prd

ramasserons application-prd.yml de même que application.yml

ou

-Dspring.profiles.active=dev

ramasserons application-dev.yml de même que application.yml

10
Indra Basak

Selon la documentation de Spring Boot ici , spring.profiles.include est utilisé pour ajouter les propriétés d'autres profils. Il ajoutera la propriété à partir d'autres profils si la propriété n'est pas présente dans le profil actif. Mais s'il est présent, il sera écrasé et le dernier à être appliqué l'emportera

5
pvpkiran