Je souhaite accéder aux valeurs fournies application.properties
, par exemple:
logging.level.org.springframework.web: DEBUG
logging.level.org.hibernate: ERROR
logging.file=${HOME}/application.log
userBucket.path=${HOME}/bucket
Je souhaite accéder userBucket.path
à mon programme principal dans une application Spring Boot.
Environment
ou via@ConfigurationProperties
@Configuration
classes, le problème est bien analysé dans le billet de blog@Component
(ou l'un de ses dérivés, c'est@Repository
-à- dire , etc.)Une autre façon consiste à injecter
org.springframework.core.env.Environment
dans votre haricot.la source
org.springframework.core.env.Environment
@ConfigurationProperties
peut être utilisé pour mapper des valeurs de.properties
(.yml
également prises en charge) à un POJO.Considérez l'exemple de fichier suivant.
.Propriétés
Employee.java
Maintenant, la valeur des propriétés est accessible par câblage automatique
employeeProperties
comme suit.la source
src/main/resources
si vous ne testez pas votre code à partir d'un test Spring.Actuellement, je connais les trois façons suivantes:
1. L'
@Value
annotationnull
. Par exemple, lorsque vous essayez de le définir dans unepreConstruct()
méthode ou uneinit()
méthode. Cela se produit car l'injection de valeur se produit après la construction complète de la classe. C'est pourquoi il vaut mieux utiliser la 3ème option.2. L'
@PropertySource
annotationPropertySouce
définit les valeurs du fichier source de propriété dans uneEnvironment
variable (dans votre classe) lorsque la classe est chargée. Vous pouvez donc récupérer facilement la postface.3. L'
@ConfigurationProperties
annotation.Il initialise une entité basée sur des données de propriété.
@ConfigurationProperties
identifie le fichier de propriétés à charger.@Configuration
crée un bean basé sur les variables du fichier de configuration.la source
spring.config.location
? Est-ce que # 2 fonctionne toujours?Vous pouvez aussi le faire de cette façon ....
Ensuite, où que vous souhaitiez lire dans application.properties, passez simplement la clé de la méthode getConfigValue.
la source
Environment
?spring.config.location
?Vous pouvez utiliser le
@Value
pour charger des variables à partir deapplication.properties
si vous allez utiliser cette valeur à un seul endroit, mais si vous avez besoin d'un moyen plus centralisé pour charger ces variables,@ConfigurationProperties
c'est une meilleure approche.De plus, vous pouvez charger des variables et les diffuser automatiquement si vous avez besoin de différents types de données pour effectuer vos validations et votre logique métier.
la source
Suivez ces étapes. 1: - créez votre classe de configuration comme ci-dessous vous pouvez voir
2: - lorsque vous avez une classe de configuration, injectez la variable à partir d'une configuration où vous en avez besoin.
la source
la source
Une application peut lire 3 types de valeur dans le fichier application.properties.
application.properties
fichier de classe
Si vous n'avez pas de propriété dans application.properties, vous pouvez utiliser la valeur par défaut
la source
Spring-boot nous permet plusieurs méthodes pour fournir des configurations externalisées, vous pouvez essayer d'utiliser des fichiers application.yml ou yaml au lieu du fichier de propriétés et fournir différentes configurations de fichiers de propriétés selon différents environnements.
Nous pouvons séparer les propriétés de chaque environnement dans des fichiers yml distincts sous des profils de ressort distincts. Ensuite, pendant le déploiement, vous pouvez utiliser:
pour spécifier le profil de ressort à utiliser. Notez que les fichiers yml doivent être nommés comme
pour qu'ils soient automatiquement repris par springboot.
Référence: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-profile-specific-properties
Pour lire à partir du fichier application.yml ou de la propriété:
La façon la plus simple de lire une valeur à partir du fichier de propriétés ou du yml est d'utiliser l'annotation spring @value. Spring charge automatiquement toutes les valeurs du yml dans l'environnement spring, afin que nous puissions directement utiliser ces valeurs de l'environnement comme:
Ou une autre méthode que le printemps propose pour lire les beans fortement typés est la suivante:
POJO correspondant pour lire le yml:
La méthode ci-dessus fonctionne bien avec les fichiers yml.
Référence: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
la source
Pour moi, rien de ce qui précède n'a fonctionné directement pour moi. Ce que j'ai fait est le suivant:
En plus de la réponse de @Rodrigo Villalba Zayas là-haut, j'ai ajouté
implements InitializingBean
à la classeet mis en œuvre la méthode
Cela ressemblera donc
la source
Les meilleures façons d'obtenir des valeurs de propriété sont d'utiliser.
1. Utilisation de l'annotation de valeur
2. Utilisation du bean Enviornment
la source
La meilleure chose à faire est d'utiliser l'
@Value
annotation, elle attribuera automatiquement une valeur à votre objetprivate Environment en
. Cela réduira votre code et il sera facile de filtrer vos fichiers.la source
Il y a deux façons,
@Value
dans votre classeOU
@Configuration
classe où vous pouvez ajouter tous vos@value
la source