2012-01-18 23 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> 

對不起我的英文不好

相關問題