如何在PropertyPlaceholderConfigurer中获取tomcat环境变量

时间:2011-11-05 14:12:47

标签: java hibernate spring

我尝试在位于我的server.xml文件中的'PropertyPlaceholderConfigurer'中获取Tomcat的jpa-spring.xml中指定的环境变量。

到目前为止,设置如下:

Tomcat server.xml

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

in 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问题类似。但是,我甚至无法用这些答案中的信息弄明白。

2 个答案:

答案 0 :(得分:5)

以下是我的建议

  • 使用当前设置,读取JNDI属性server-env并使用相同的方法来加载属性文件真的很复杂。
  • 组装spring应用程序(和PropertyPlaceholderConfigurer)的方式,spring将首先尝试在OS环境中查找属性server-env,然后在java系统属性中查找(使用-D选项从命令传递) )。它在这两个地方都找不到它,因此失败了。
  • 所以目前最简单的方法是传递应用程序服务器的server-env form命令提示符的值(调用java的地方;典型的语法是-Dserver-env = dev)。我把它留给你弄清楚。
  • 如果上面的选项看起来有点复杂,另一个更简单的方法是将名称为server-env的环境变量设置为适当的值(在Windows上set server-env=dev .Plz检查尊重操作系统文档)。

答案 1 :(得分:3)

那些Environment元素正在设置JNDI。默认情况下,Spring不支持从JNDI中获取值。

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

可能会给你一些有用的想法。