2011-11-05 55 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

感谢您的回复。然而,线程中提到的东西有点提前,因为我目前在这方面的知识。必须采用更简单的解决方案(请参阅上面的评论)。 –