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