2012-01-18 17 views
1

我试图加载来自环境变量的属性文件,所以这里是我的尝试:propertyPlaceHolderConfigurer和environement可变

<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 一个新的环境变量,但停止和启动应用程序时变量的值没有设置,有什么想法为什么?

UPDATE:要求

我想从文件系统上的外部属性文件,其中它的路径被存储在读出在applicationContext.xml中休眠特性(URL,用户名,密码)环境变量。

+0

见Bozho的回答是:http://stackoverflow.com/questions/3965446/how-to-read-system-environment-variable-in-spring-applicationcontext – atrain 2012-01-18 14:43:22

+0

你怎么知道它没有设置?你也应该像'file:$ {My_ENV_VAR}/*。properties'那样传递文件/文件模式而不是目录。 – mrembisz 2012-01-18 15:13:26

+0

对不起,我更新了这篇文章,我知道它没有设置,因为构建后我看到applicationContext,我可以看到值' file:$ {My_ENV_VAR}'没有改变。 – 2012-01-18 15:20:09

回答

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() --> 
+0

对不起,我不明白,我希望该属性占位符指向一个属性文件它的值是从环境变量读取,这样的事情是不可行的? – 2012-01-18 14:43:53

+0

我为需求添加了更新,如果有另一个解决方案为我正在尝试做。 – 2012-01-18 14:46:29

+0

@fresh_dev问题是:您在创建时使用PropertyPlaceholderConfigurer语法。 – 2012-01-18 14:52:40

1

呦应该使用这种方式:

首先在WEB-INF/classes目录申报的Spring bean

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

现在创建文件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> 

对不起我的英文不好

相关问题