2011-11-05 164 views
3

我嘗試在位於我的jpa-spring.xml文件中的'PropertyPlaceholderConfigurer'中獲取Tomcat的server.xml中指定的環境變量。如何在PropertyPlaceholderConfigurer中獲取tomcat環境變量

到目前爲止,設置如下所示:

Tomcat的server.xml

<Environment description="Identifies the server environement" 
      name="server-env" 
      type="java.lang.String" 
      value="dev" /> 

WebContent/META-INF/context.xml

<Context> 
    <ResourceLink name="server-env" global="server-env" type="java.lang.String"/> 
</Context> 

這是WebContent/WEB-INF/web.xml引用,如:

<resource-env-ref> 
    <description>Identifies server environement</description> 
    <resource-env-ref-name>server-env</resource-env-ref-name> 
    <resource-env-ref-type>java.lang.String</resource-env-ref-type> 
</resource-env-ref> 

<!-- Spring Integration --> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value> 
     /WEB-INF/config/jpa-spring.xml 
</param-value> 
</context-param> 

而在/WEB-INF/config/jpa-spring.xml我試圖讓該變量作爲替代:

<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="locations"> 
     <list> 
      <value>WEB-INF/config/db.${server-env}.properties</value> 
     </list> 
    </property> 
</bean> 

這是一個設置我放在一起使用從網絡上找到幾篇文章的信息。

不過,我得到了如下的錯誤...

Could not resolve placeholder 'server-env' in [WEB-INF/config/db.${server-env}.properties] as system property: neither system property nor environment variable found 
05 Nov 2011 14:45:13,385 org.springframework.web.context.ContextLoader 
ERROR Context initialization failed 

org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/config/db.${server-env}.properties] 

...起tomcat的時候。

什麼是正確的方法來實現我在找什麼?

我知道這個問題類似於thisthis的問題。但是,我甚至無法用這些答案中的信息弄清楚。

+0

你正在使用哪個版本的Spring? – Santosh

回答

5

這裏是我的建議

  • 隨着當前設置,它真的要複雜閱讀JNDI財產server-env並使用相同的加載屬性文件。
  • 您組裝Spring應用程序(和PropertyPlaceholderConfigurer)的方式,spring將首先在OS環境中嘗試尋找屬性server-env,然後在java系統屬性中使用-D選項從命令傳遞。它在這些地方都沒有發現,因此失敗了。
  • 因此,目前最簡單的方法是傳遞應用程序服務器的server-env窗體命令提示符的值(在其中調用java;典型的語法是-Dserver-env = dev)。我把這個留給你弄清楚。
  • 如果上面的選項看起來有點複雜,另一個更簡單的方法是將名稱爲server-env的環境變量設置爲適當的值(在Windows上爲其set server-env=dev。Plz檢查尊重OS文檔)。
+1

感謝您的建議。我在'catalina.properties'中定義了我的'server-env'變量,並且可以使用通常的'$ {server-env}'語法來獲取它。真的很簡單,正是我在找的東西。 –

3

這些Environment元素正在設置JNDI。默認情況下,Spring中的任何簡單的語法糖都不支持從JNDI獲取值。

http://www.theserverside.com/news/thread.tss?thread_id=35474#179220

可能給你一些有益的思路。

+1

感謝您的回覆。然而,線程中提到的東西有點提前,因爲我目前在這方面的知識。必須採用更簡單的解決方案(請參閱上面的評論)。 –