119 votes

comment lire la variable d'environnement système dans Spring applicationContext

Comment lire le system environment variable dans le contexte de l'application?

Je veux quelque chose comme:

 <util:properties id="dbProperties"
        location="classpath:config_DEV/db.properties" />
 

ou

 <util:properties id="dbProperties"
        location="classpath:config_QA/db.properties" />
 

en fonction de l'environnement.

Puis-je avoir quelque chose comme ça dans mon contexte d'application?

 <util:properties id="dbProperties"
        location="classpath:config_${systemProperties.env}/db.properties" />
 

où la valeur réelle est définie en fonction de la variable d'environnement système

J'utilise Spring 3.0

108voto

amra Points 4967

Vous êtes proche: o) Spring 3.0 ajoute Spring Expression Language . Vous pouvez utiliser

 <util:properties id="dbProperties" 
    location="classpath:config_#{systemProperties['env']}/db.properties" />
 

Combiné avec java ... -Denv=QA devrait résoudre votre problème.

51voto

Bozho Points 273663

Vérifiez cet article . Cela vous donne plusieurs façons de le faire, via le PropertyPlaceholderConfigurer qui supporte les propriétés externes (via la propriété systemPropertiesMode )

26voto

Istao Points 2764

Oui, vous pouvez faire <property name="defaultLocale" value="#{ systemProperties['user.region']}"/> par exemple.

La variable systemProperties est prédéfinie, voir 6.4.1 Configuration basée sur XML .

8voto

Brad Parks Points 5513

Dans la définition de votre bean, assurez-vous d'inclure "searchSystemEnvironment" et définissez-le sur "true". Et si vous l'utilisez pour créer un chemin d'accès à un fichier, spécifiez-le en tant que fichier: /// url.

Ainsi, par exemple, si vous avez un fichier de configuration situé dans

 /testapp/config/my.app.config.properties
 

puis définissez une variable d'environnement comme suit:

 MY_ENV_VAR_PATH=/testapp/config
 

et votre application peut charger le fichier en utilisant une définition de bean comme celle-ci:

par exemple

 <bean class="org.springframework.web.context.support.ServletContextPropertyPlaceholderConfigurer">
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="searchSystemEnvironment" value="true" />
    <property name="searchContextAttributes" value="true" />
    <property name="contextOverride" value="true" />
    <property name="ignoreResourceNotFound" value="true" />
    <property name="locations">
        <list>
            <value>file:///${MY_ENV_VAR_PATH}/my.app.config.properties</value>
        </list>
    </property>
</bean>
 

6voto

eis Points 14687

Pour mon cas d'utilisation, je devais accéder uniquement aux propriétés du système, mais fournir des valeurs par défaut au cas où elles ne seraient pas définies.

Voici comment vous le faites:

 <bean id="propertyPlaceholderConfigurer"   
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
    <property name="searchSystemEnvironment" value="true" />
</bean>  
<bean id="myBean" class="path.to.my.BeanClass">
    <!-- can be overridden with -Dtest.target.host=http://whatever.com -->
    <constructor-arg value="${test.target.host:http://localhost:18888}"/>
</bean>
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X