首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场

Linux
EN

Stack Overflow用户
提问于 2013-03-06 18:02:05
回答 2查看 1.6K关注 0票数 0

ApplicationContext.xml中的配置:

代码语言:javascript
运行
复制
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/jdbc-${WEB_ENVIRONMENT}.properties</value>
                <value>classpath:/settings-${WEB_ENVIRONMENT}.properties</value>
            </list>
        </property>
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"></property>
        <property name="searchSystemEnvironment" value="true"></property>
</bean>

我在用户的&root的.bashrc文件中设置了环境变量,如下所示

代码语言:javascript
运行
复制
export WEB_ENVIRONMENT=prod

在启动tomcat时,我得到了一个错误

代码语言:javascript
运行
复制
org.springframework.beans.factory.BeanInitializationException: Could not load properties; nested exception is java.io.FileNotFoundException: class path resource [jdbc-${WEB_ENVIRONMENT}.properties] cannot be opened because it does not exist

我也试过这样做:

代码语言:javascript
运行
复制
<bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:/jdbc-#{T(java.lang.System).getenv('WEB_ENVIRONMENT')}.properties</value>
                <value>classpath:/settings-#{T(java.lang.System).getenv('WEB_ENVIRONMENT')}.properties</value>
            </list>
        </property>
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE"></property>
        <property name="searchSystemEnvironment" value="true"></property>
</bean>

这一次我得到了错误

代码语言:javascript
运行
复制
Caused by: java.io.FileNotFoundException: class path resource [jdbc-.properties] cannot be opened because it does not exist

这意味着SpEL在applicationContext.xml中是函数的,但不能从系统环境中获取变量。

为了检查值是否正确设置,我运行了echo ${WEB_ENVIRONMENT},它正确地返回了值。因此,要检查java是否能够从我运行的环境中获取值

代码语言:javascript
运行
复制
public class Test {

    public static void main(String[] args) {
        System.out.println(System.getenv("WEB_ENVIRONMENT"));
    }

}

这也正确地返回了"prod“。

这两个版本都运行在中,但在Amazon 2的Linux 中不运行。

接下来我该怎么做才能让它发挥作用?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-03-06 19:51:36

我想,对于第一次尝试,你有一个鸡蛋和鸡的问题。您希望使用需要用属性替换的值来配置PropertyPlaceholderConfigurer。这不管用!

SpEL方法应该可以工作,我只是在我的mac (类似UNIX系统)上尝试了一个类似的配置,其值由printenv on The shell (USER)列出。结果如预期:

代码语言:javascript
运行
复制
java.io.FileNotFoundException: class path resource [settings-arne.properties] cannot be opened because it does not exist

您可以按照建议的here设置环境变量。另一种方法是添加变量以将其添加到/etc/profile,后者全局地添加env变量。前者是首选。

票数 1
EN

Stack Overflow用户

发布于 2013-03-06 19:23:37

我知道有几个选择,

  1. 启动应用程序时,尝试将其设置为VM参数。即-DWEB_ENVIRONMENT=prod
  2. 如果使用Tomcat,您可以在JAVA_OPTS中设置它,请参阅此answer,以了解如何实现该目标。
  3. 在我自己的项目中,我在catalina.properties中通过放置-Druntime_env=dev设置了环境变量值。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15254654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档