Nous utilisons le code ci-dessous pour injecter des beans Spring avec des propriétés à partir d'un fichier de propriétés.
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations" value="classpath:/my.properties"/>
</bean>
<bean id="blah" class="abc">
<property name="path" value="${the.path}"/>
</bean>
Existe-t-il un moyen d'accéder aux propriétés par programme? J'essaye de faire du code sans injection de dépendance. Alors j'aimerais juste avoir un code comme celui-ci:
PropertyPlaceholderConfigurer props = new PropertyPlaceholderConfigurer();
props.load("classpath:/my.properties");
props.get("path");
spring
properties
Marcus Léon
la source
la source
Réponses:
Qu'en est-il de PropertiesLoaderUtils ?
la source
PropertyPlaceholderConfigurer
, même si c'est exagéré pour la tâche.Si tout ce que vous voulez faire est d'accéder à la valeur de l'espace réservé à partir du code, il y a l'
@Value
annotation:Pour accéder aux espaces réservés à partir de SPEL, utilisez cette syntaxe:
Pour exposer la configuration aux vues sur lesquelles SPEL est désactivé, on peut utiliser cette astuce:
Et puis utilisez l'exposeur pour exposer les propriétés à une vue:
Alors en vue, utilisez les propriétés exposées comme ceci:
Cette solution présente l'avantage de pouvoir compter sur une implémentation d'espace réservé standard injectée par la balise context: property-placeholder.
Maintenant, pour terminer, si vous avez vraiment besoin d'un pour capturer toutes les propriétés d'espace réservé et leurs valeurs, vous devez les diriger via StringValueResolver pour vous assurer que les espaces réservés fonctionnent comme prévu dans les valeurs de propriété. Le code suivant le fera.
la source
CRÉDIT : accès par programme aux propriétés dans Spring sans relire le fichier de propriétés
J'ai trouvé une belle implémentation pour accéder aux propriétés par programme au printemps sans recharger les mêmes propriétés que Spring a déjà chargées. [De plus, il n'est pas nécessaire de coder en dur l'emplacement du fichier de propriétés dans la source]
Avec ces changements, le code semble plus propre et plus facile à gérer.
le concept est assez simple. Il suffit d'étendre l'espace réservé aux propriétés par défaut du ressort (PropertyPlaceholderConfigurer) et de capturer les propriétés qu'il charge dans la variable locale
Exemple d'utilisation
Changements de configuration de printemps
J'espère que cela aidera à résoudre les problèmes que vous avez
la source
J'ai fait cela et cela a fonctionné.
Cela devrait fonctionner.
la source
Vous pouvez également utiliser les utilitaires de printemps ou charger des propriétés via le PropertiesFactoryBean.
ou:
Ensuite, vous pouvez les récupérer dans votre application avec:
et utilisez en plus ces propriétés dans votre configuration:
Ceci est également dans la documentation: http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#xsd-config-body-schemas-util-properties
la source
Créez une classe comme ci-dessous
Puis là où vous voulez accéder à une utilisation immobilière
- écrire des getters et des setters dans la classe accesseur
la source
Comme vous le savez, les versions plus récentes de Spring n'utilisent pas PropertyPlaceholderConfigurer et utilisent maintenant une autre construction cauchemardesque appelée PropertySourcesPlaceholderConfigurer. Si vous essayez d'obtenir des propriétés résolues à partir du code et que vous souhaitez que l'équipe Spring nous donne un moyen de le faire il y a longtemps, votez pour ce message! ... Parce que c'est ainsi que vous procédez de la nouvelle façon:
PropertySourcesPlaceholderConfigurer de sous-classe:
Pour l'utiliser, assurez-vous d'utiliser votre sous-classe dans votre @Configuration et enregistrez-y une référence pour une utilisation ultérieure.
Usage:
la source
Voici un autre exemple.
la source
Cela m'aide à:
la source
Cela résoudra toutes les propriétés imbriquées.
la source
Vous pouvez obtenir vos propriétés en
Environment
classe. Dans l'état actuel de la documentation:Ayant Environment comme
env
variable, appelez simplement:Vous pouvez obtenir vos propriétés `` brutes '' via:
Il recherchera dans toutes les sources de propriétés enregistrées par le printemps.
Vous pouvez soit obtenir l'environnement via:
ApplicationContextAware
puis en appelantgetEnvironment()
le contexteEnvironmentAware
.Il est obtenu via l'implémentation d'une classe car les propriétés sont résolues au début du démarrage de l'application, car elles peuvent être nécessaires pour la construction du bean.
En savoir plus sur la documentation: documentation Spring Environment
la source
Cet article explique également comment accéder aux propriétés: http://maciej-miklas.blogspot.de/2013/07/spring-31-programmatic-access-to.html
Vous pouvez accéder aux propriétés chargées par spring property-placeholder sur un tel spring bean:
la source
dans servlet-context.xml après cela, vous pouvez directement utiliser votre fichier partout
la source
Veuillez utiliser le code ci-dessous dans votre fichier de configuration Spring pour charger le fichier à partir du chemin de classe de votre application
la source
C'est la meilleure façon dont je l'ai fait fonctionner:
la source