2012-09-12 104 views
7

的環境變量,我需要從我applicationContext.xml閱讀從applicationContext.xml中

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location" value="${PATH_ENV}/myprop.properties" /> 
</bean> 

我怎樣才能做到這一點看在我的web.xml

<env-entry> 
    <description>Path Repositorio NFS</description> 
    <env-entry-name>PATH_ENV</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>C:/V3</env-entry-value> 
</env-entry> 

定義的環境變量?


最後,我已經做了下:

1 context.xml中定義的環境變量:

<Environment name="PATH_ENV" type="java.lang.String"/> 

2在web.xml中定義

<env-entry> 
    <description>Path Repositorio NFS</description> 
    <env-entry-name>PATH_ENV</env-entry-name> 
    <env-entry-type>java.lang.String</env-entry-type> 
    <env-entry-value>/WEB-INF/</env-entry-value> 
    </env-entry> 

ENV進入3定義在applicationContext.xml中

<bean id="configurationPath" class="org.springframework.jndi.JndiObjectFactoryBean"> 
    <property name="jndiName"> 
     <value>java:comp/env/PATH_ENV</value> 
    </property> 
</bean> 

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <property name="location"> 
      <bean factory-bean="configurationPath" factory-method="concat"> 
       <constructor-arg value="myprop.properties"/> 
      </bean> 
     </property> 
    </bean> 

這是正確運行,但是如果我定義一個完整路徑:

<env-entry-value>C:/V3/</env-entry-value> 

我有一個問題:

java.io.FileNotFoundException: Could not open ServletContext resource [/C:/V3/aesantasa.properties] 

我不能定義一個完整路徑ENV-入門價值爲什麼?

+0

如果有人遇到這個問題,它應該是'文件:C:/ V3/' – Jamie

回答

0

您可以使用context-param,這將工作。

<context-param> 
    <param-name>PATH_ENV</param-name> 
    <param-value>C:/V3</param-value> 
</context-param> 
4

您可以查找JNDI入口使用的JndiObjectFactoryBean或<jee:jndi-lookup>(包括環境條目和資源):

<jee:jndi-lookup id="PATH_ENV" jndi-name="PATH_ENV"/> 

(要使用JEE命名空間,則必須declare它)。

它定義了一個名爲「PATH_ENV」的spring bean,它包含(作爲字符串)在環境條目中配置的路徑。您現在可以將其注入到其他豆類中:

<bean class="xy.Foo"> 
    <property name="path" ref="PATH_ENV"/> 
</bean> 

剩下的困難是串聯字符串。 (遺憾的是,沒有JndiPlaceholderConfigurer將取代使用JNDI環境條目的佔位符,所以你不能使用${property}/foo語法來連接,並且還必須提供另一個bean定義:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location"> 
     <bean factory-bean="PATH_ENV" factory-method="concat"> 
      <constructor-arg>/myprop.properties</constructor-arg> 
     </bean> 
    </property> 
</bean> 

(未測試的代碼爲我不噸有在手Spring項目進行測試)

+0

我無法閱讀上下文am.Is這是讀取applicationContext.xml中的上下文參數的正確方法嗎? value =「$ {PATH_ENV} /myprop.properties」 – Geme

+0

上下文參數不同於環境條目。你的問題說環境條目(''),那麼你爲什麼現在談論上下文參數('')?至於如何引用它,我會編輯以包含樣本。 – meriton

+0

org.springframework.beans.factory.BeanCreationException:創建名爲'PATH_ENV'的bean時出錯:init方法的調用失敗;嵌套異常是javax.naming.NameNotFoundException:注意:PATH_ENV沒有特定的權限 – Geme

0

爲什麼不直接使用下面的?

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="file:C:/V3/myprop.properties"/> 
</bean> 
+0

屬性文件需要有一個基於相同變量的相對路徑 – Geme

+0

爲什麼不把.properties文件放在資源中或項目中類路徑中的類似文件夾中? –

-1

我解決了一些東西,我想,類似的。

我創建的路徑改變部分Windows系統變量:

my computer --> advanced options --> environment options --> Systeme Variable 

然後用這個,我完成春季AppContext的路徑是這樣的:

<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 

    <property name="locations"> 
     <list> 
       <value>file:${PARENT_PATH}/conf/dev/jdbc.properties</value> 
     <list>   
    </property> 
</bean> 

我不知道是否真的有幫助,但對我而言,作品

+0

我的問題是變量不能是一個系統變量 – Geme