Mon application Spring Boot a ci-dessous les fichiers de propriétés.
src/main/resources/config/DEV/env.properties mail.server=dev.mail.domain src/main/resources/config/QA/env.properties mail.server=qa.mail.domain src/main/resources/config/common/env.properties mail.url=${mail.server}/endpoint
Est-il possible de charger "common / env.properties" afin que ses espaces réservés soient résolus en utilisant le fichier de propriétés spécifique à l'environnement donné. Pour l'environnement DEV, nous voulons que les espaces réservés dans "common / env.properties" soient résolus à l'aide des valeurs de "DEV / env.properties".
Il y a des réponses sur la façon de charger plusieurs fichiers de propriétés et en fonction du profil chargement mais impossible de trouver une réponse pour ce cas d'utilisation particulier.
Merci d'avance.
3 Réponses :
Vous pouvez y parvenir en déclarant une propriété source sur une configuration de classe et en définissant une variable d'environnement dans le chemin:
@PropertySources({ @PropertySource("classpath:config/${env}/env.properties"), @PropertySource("classpath:config/common/env.properties") }) public class config{}
Et puis vous lancez l'application spring boot avec la variable de ligne de commande -env=dev
UPDATE[
Vous pouvez utiliser l'annotation @PropertySources pour charger plusieurs propriétés.
@PropertySource({ "classpath:config/${env}/env.properties" }) @Configuration public class config{}
Merci. Comment /common/env.properties sera-t-il chargé? Nous aurions besoin de /common/env.properties et de {env} /env.properties chargés.
Veuillez voir ma mise à jour dans la réponse. Vous pouvez charger plusieurs propriétés en utilisant l'annotation @PropertySources
. Vous pouvez donc charger à la fois /common/env.properties et {env} /env.properties en même temps. Si cela a été utile, merci de marquer la réponse comme réponse.
Merci, si nous chargeons de cette façon, les espaces réservés dans /common/env.properties seront-ils résolus avec les valeurs de {env} /env.properties?
comme il n'y a pas d'espace réservé dans ce chemin /common/env.properties, il n'y a pas de résolution.
Pas dans le chemin, mais il y a des espaces réservés dans le contenu de /common/env.properties. Par exemple; mail.url = $ {mail.server} / endpoint. Nous avons besoin que $ {mail.server} soit résolu avec la valeur du contenu de {env} /env.properties. /DEV/env.properties contient mail.server = dev.mail.domain
2 Options:
common / application.properties
en utilisant configuration-maven-plugin
et filtrez les fichiers pour chaque environnement. Il est désormais obsolète. application- .properties
pour chaque environnement et transmettez -Dspring.profiles.active=
comme option VM au démarrage de l'application. Spring prendra automatiquement la propriété du fichier correct. Dans l'option 2, vous écraserez tout ce qui est présent dans application.properties par application-.properties. Vous n'avez donc pas à ajouter uniquement les propriétés que vous devez modifier par environnement.
par exemple:
Votre application.properties
peut avoir p >
@Configuration @PropertySource("classpath:config.properties") @PropertySource(value = "classpath:config-${spring.profiles.active}.properties", ignoreResourceNotFound = true)
Votre application-dev.properties
peut avoir
logging.level.root=WARN logging.level.org.apache=WARN logging.level.org.springframework=DEBUG
ce qui signifie, lorsque vous démarrez l'application en utilisant le profil dev
, le printemps prend
logging.level.org.springframework=DEBUG
edit:
De plus, vous pouvez essayer quelque chose comme ci-dessous sur votre classe. (Spring remplacera la valeur dans config.properties par les valeurs de config-dev.properties). ignoreResourceNotFound
s'assurera que l'application démarrera toujours avec les valeurs par défaut même si le fichier correspondant n'est pas trouvé.
logging.level.root=WARN logging.level.org.apache=WARN logging.level.org.springframework=WARN
Merci. Je vais essayer ceci et mettre à jour. Vérification par curiosité, existe-t-il un moyen d'utiliser /common/env.properties au lieu de application.properties pour stocker les valeurs par défaut.
Vous pouvez ajouter les fichiers env.properties au chemin de classe. Vérifiez ceci: stackoverflow.com/questions/44499306/...
Vous pouvez ajouter un fichier resources / application.yml dans lequel vous pouvez avoir plusieurs profils dans un seul fichier. MultiProfile Yaml Par exemple, il existe deux profils différents 'dev' et 'qa' avec des noms d'application différents 'DEV' et 'QA' et un defaultName 'Default'
spring: application: name: Default profiles: active: qa --- spring: profiles: dev application: name: DEV --- spring: profiles: qa application: name: QA
C'est exactement à cela que servent
application.properties
et le système de profils.