Détails de l'environnement:

  • Spring Boot 2.1.15.RELEASE
  • Printemps 5.2.2.RELEASE

J'ai le fichier application.yml comme ci-dessous,

creds:
    first: default value
    
---

spring.profiles: dev

creds:
    first: dev value


---

spring.profiles: dev & mobile

creds:
    first: dev-mobile value

Et

Spring.profiles.active = dev, mobile

Cependant, le problème est qu'il charge toujours la «valeur par défaut».

La propriété sous le profil «dev & mobile» n'est jamais chargée.

Appréciez toute aide.

https://docs.spring.io/spring-boot/docs/current/reference/html/spring-boot-features.html#boot-features-external-config-multi-profile-yaml

0
Vijay 27 août 2020 à 06:22

1 réponse

Meilleure réponse

Premièrement, votre application.properties ne pourra pas choisir le profil combiné ( profil : dev et mobile) si vous définissez des profils individuellement ( profil : dev) et en le combinant à nouveau avec un autre profil (combiné à nouveau avec le mobile, je veux dire dev et mobile ) . Cela ne vous donne aucune exception, mais votre profil combiné ne sera pas choisi.

La documentation dit que nous pouvons combiner des profils avec des symboles & | et autres symboles veuillez vous référer à la documentation, nous pouvons faire de telles combinaisons complexes. Mais, je ne vous recommande pas de définir un profil individuellement et de le combiner également avec d'autres profils, comme vous avez combiné dev et mobile , après avoir défini le profil dev séparément.

L'exemple suivant montre comment cela fonctionne?

application.yaml

creds:
  first: default value

---

spring:
  profiles: dev

creds:
  first: dev value

---

spring:
  profiles: mobile

creds:
  first: mobile val

---

spring:
  profiles: dev & mobile

creds:
  first: dev-mobile value

Que se passe-t-il si nous définissons un profil individuellement et le combinons avec un autre profil? (comme vous l'avez fait).

Dans ce fichier application.yml, j'ai défini un profil dev, mobile et combiné (dev et mobile), et comme nous le savons, il existe également un profil par défaut.

Si je n'invoque aucun profil, comme nous le savons, il choisira le profil par défaut. Par exemple, si nous lisons une propriété comme celle-ci:

@Value("${creds.first}")
String value;

valeur de propriété : valeur par défaut

Si --spring.profiles.active = dev , alors il choisira le profil dev .

valeur de propriété : valeur de développement

Si - -spring.profiles.active = mobile , alors il choisira le profil mobile .

valeur de la propriété : val. mobile

Si --spring.profiles.active = mobile, dev , alors ici, nous avons essayé d'appeler les deux profils en même temps, idéalement, nous nous attendons à ce que le profil combiné soit sélectionné. Mais il ne sera pas choisi. Étant donné que nous avons défini des profils distincts ( profil: dev et profil: mobile séparément), tout d'abord, il lit la propriété à partir du profil mobile et puis il lit la propriété à partir du profil dev , s'il est trouvé, puis il remplace la valeur de propriété du profil dev . S'il n'est pas trouvé, il restera fidèle à la valeur de propriété du profil mobile uniquement. Je veux dire, il lit

valeur de propriété : valeur de développement

Si --spring.profiles.active = dev, mobile , alors ici, il lit d'abord la valeur de la propriété à partir du profil dev , puis, il recherche à nouveau la propriété dans Le profil mobile , s'il est trouvé, remplace la valeur. S'il n'est pas trouvé, il restera uniquement à la valeur de propriété du profil dev .

C'est pourquoi il ne lira pas le profil combiné (dev et mobile).

Comment et quand il lit le profil combiné?

Selon la documentation, il peut choisir un profil combiné, si les profils mentionnés n'auraient pas dû être définis séparément ailleurs:

Exemple: application.yaml

creds:
  first: default value

---

spring:
  profiles: showcase

creds:
  first: showcase value

---

spring:
  profiles: dev & mobile

creds:
  first: dev-mobile value

Ici, dev, mobile sont combinés en utilisant & et ils ne sont pas définis séparément ailleurs. Donc, maintenant, si nous appelons --spring.profiles.active = dev, mobile , il choisira la valeur de profil combinée

valeur de propriété : valeur dev-mobile

Enfin, si --spring.profiles.active = dev ou --spring.profiles.active = mobile , il ne choisira pas le profil combiné. Donc, il sera malade de profil par défaut.

valeur de propriété : valeur par défaut

Exemple: https://github.com/donthadineshkumar/multi-profile-document.git < / a>

0
Dinesh Dontha 27 août 2020 à 16:51