propertyPlaceHolderConfigurer和环境变量

时间:2012-01-18 14:15:50

标签: spring spring-el

我正在尝试从环境变量加载属性文件,所以这是我尝试过的:

<bean id="propertyPlaceholderConfigurer"
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>

                <value>classpath:messages/application.properties</value>
                <value>file:${My_ENV_VAR}/*.properties</value>

            </list>
        </property>

        <property name="ignoreResourceNotFound" value="true" />
        <property name="searchSystemEnvironment" value="true" />
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />

    </bean>

我有一个名为My_ENV_VAR=C:\Program Files\My Folder\props.properties的新环境变量 但是当停止并启动应用程序时,没有设置变量的值,任何想法为什么?

更新:要求

我想从文件系统上的外部属性文件中读取 applicationContext.xml 中的hibernate属性(url,username,password),其路径存储在环境变量中。

2 个答案:

答案 0 :(得分:8)

您正尝试使用PropertyPlaceholderConfigurer创建PropertyPlaceholderConfigurer。这是一个鸡/蛋问题,它无法正常工作!

尝试使用表达式语言(请参阅this section以供参考),但在您的情况下,它很棘手,因为您想要混合静态和动态内容。可能这样的事情会起作用:

<property name="locations"
  value="classpath:messages/application.properties,
  #{ T(java.lang.System).getenv('MY_ENV_VAR')}" />
  <!-- changed method name, it's getenv(), not getEnv() -->

答案 1 :(得分:1)

哟应该用这种方式:

首先声明spring bean

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="locations">
        <list>             
            <value>classpath:config.properties</value>
        </list>
    </property>
</bean>

现在在WEB-INF/classes目录中创建文件config.properties并输入:

jboss.variable=${jboss.modules.dir}

注意:当我部署JBoss 6 EAP时,日志会显示:

jboss.modules.dir = C:\Java\jee-container\jboss-eap-6.1\modules

并在应用程序上下文文件中使用该变量:

<bean id="nameOfBean"
    class="com.moeandjava.pusku.MySpringBean">
    <property name="path" value="${jboss.variable}" />
</bean>

抱歉我的英文不好