在 Linux (Red Hat) 中为 Tomcat 中的 Java Web 应用程序设置全局环境变量

Setting Global Environmental Variables in Linux (Red Hat) for Java Web Application in Tomcat

我们已经外部化了应用程序中的所有属性并通过设置环境变量来读取它,就像这样..

<bean id="propertyPlaceholderConfigurer" class="org.jasypt.spring31.properties.EncryptablePropertyPlaceholderConfigurer">
    <constructor-arg ref="configurationEncryptor" />
    <property name="ignoreUnresolvablePlaceholders" value="true"/>
    <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"/>
    <property name="searchSystemEnvironment" value="true"/>
    <property name="locations">
        <list>
            <value>file:${ENV_PROPS}/config/*.properties</value>
        </list>
    </property>
</bean> 

以上代码在 Windows 和 Mac 中均有效,即环境变量 ENV_PROPS 已正确解析。

但是它无法在 Linux (Red Hat) 中解析。我试过这样设置环境变量..

# /opt/application/config/database.properties is a valid path     
export ENV_PROPS=/opt/application 

在 Linux 的以下位置。

  1. /etc/profile.d/env_vars.sh

  2. /etc/profile

  3. /etc/bashrc

  4. /tomcat/conf/setenv.sh(为此,java 代码 System.getenv 有效,但 xml 无法解析)

事实证明 applicationContext.xml 在 linux/tomcat 中的加载顺序有问题,而不是环境变量问题。

我们的应用程序中有多个上下文文件,仅在 main applicationContext.xml 中应用上述 bean(也在 web.xml 中定义)没有帮助。

我们必须像这样明确地将上述 bean 作为资源导入到多个 xml 文件中。