5
votes

Fichiers de propriétés personnalisées spécifiques au profil dans Spring Boot

Je voulais vérifier si Spring Boot offre une aide pour utiliser le fichier de configuration en dehors du fichier application.properties . Ex: fichier my-custom.properties qui peut être spécifique au profil:

  1. my-custom-dev.properties pour le profil dev
  2. my-custom-uat.properties pour le profil uat

Edit: La question est que, j'ai le fichier normal application- {env} .property , à part cela, il y a d'autres fichiers de propriétés en fonction de leur contenu de données (ex: DB spécifique propriétés pour la journalisation, que je souhaite stocker dans db-log.properties, comment pourrais-je rendre les autres fichiers sensibles au profil?


1 commentaires

Cela est expliqué ici dans le Guide de référence de Spring Boot. En bref, ajoutez --spring.config.name = application, file1, file2 cela demandera à Spirng Boot de (éventuellement) détecter file1.properties et `file1- {profile} .properties à côté de celles par défaut.


5 Réponses :


-1
votes

Oui. Absolument. Il vous suffit de fournir le profil que vous souhaitez au démarrage.
par exemple:

-Dspring.profiles.active=customer

utilisera application-prod.properties

-Dspring.profiles.active=prod 

utilisera application-custom.properties


0 commentaires

2
votes

En plus des fichiers application.properties,

les propriétés spécifiques au profil peuvent être définies avec la convention suivante: application- {profile} .properties.

L'environnement a un ensemble de profils par défaut (par défaut, [par défaut]) qui sont utilisés si aucun profil actif n'est défini (en d'autres termes, si aucun profil n'est explicitement activé, alors les propriétés de l'application .properties sont chargées)

Pour exécuter plusieurs profils:

1.application-prod.properties

2.application-dev .properties

java -jar hello-world.jar --spring.config.name=application,conf --spring.config.location=classpath:/external/properties/,classpath:/com/learn/../../

3.application.properties (profil par défaut)

mvn spring-boot:run

4. Args de ligne de commande avec fichiers de propriétés personnalisés

spring.config.name - Définit les noms des fichiers de configuration (valeurs séparées par des virgules) spring.config.location - Définissez les emplacements où Spring Boot trouvera vos fichiers de configuration externalisés.

mvn spring-boot:run -Dspring-boot.run.profiles=dev,prod

https://docs.spring.io/spring-boot/docs/current /reference/html/boot-features-profiles.html

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


1 commentaires

lorsque vous activez plusieurs profils de cette manière, l'ordre des fichiers de propriétés est-il déterministe (au cas où vous attribuez des valeurs différentes à la même propriété)?



1
votes

En plus du fichier application.properties , vous pouvez définir comme application- {profile} .properties comme vous le souhaitez. Le fichier choisi est déterminé au lancement, suivant le profil que vous avez sélectionné.


0 commentaires

0
votes

La convention par défaut utilisée par spring est application-.properties. Donc, si le profil est dev, il recherche application-dev.properties

Vous pouvez également utiliser le fichier bootstrap.properties et spécifier spring.application.name = my-custom

Dans ce cas, Spring cherchera le fichier my-custom.properties et bien sûr, vous pourrez l'utiliser avec le profil dev, uat afin que le nom du fichier de propriétés soit my-custom-dev.properties.

Vous pouvez également transmettre des fichiers de configuration comme arguments de ligne de commande ainsi que -Dspring.config.location = chemin du fichier.


0 commentaires

0
votes

Vous pouvez l'utiliser avec le profil actif

@Configuration
@PropertySource("classpath:my-custom-${spring.profiles.active}.properties")


1 commentaires

Cela ne fonctionnera pas comme vous le pensez. spring.profiles.active est un tableau et non un seul élément. Vous pouvez activer plusieurs profils à la fois. Ensuite, cela ne fonctionnera pas car il recherchera alors un fichier nommé my-custom- [profile1, profile2] .properties . Ce dont j'imagine à peine être le vrai nom.