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:
my-custom-dev.properties pour le profil dev 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?
5 Réponses :
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
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
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é)?
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é.
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.
Vous pouvez l'utiliser avec le profil actif
@Configuration
@PropertySource("classpath:my-custom-${spring.profiles.active}.properties")
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.
Cela est expliqué ici dans le Guide de référence de Spring Boot. En bref, ajoutez
--spring.config.name = application, file1, file2cela demandera à Spirng Boot de (éventuellement) détecterfile1.propertieset `file1- {profile} .properties à côté de celles par défaut.