ApplicationContext.xml中的配置:
<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文件中设置了环境变量,如下所示
export WEB_ENVIRONMENT=prod
在启动tomcat时,我得到了一个错误
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
我也试过这样做:
<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>
这一次我得到了错误
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是否能够从我运行的环境中获取值
public class Test {
public static void main(String[] args) {
System.out.println(System.getenv("WEB_ENVIRONMENT"));
}
}
这也正确地返回了"prod“。
这两个版本都运行在中,但在Amazon 2的Linux 中不运行。
接下来我该怎么做才能让它发挥作用?
发布于 2013-03-06 19:51:36
我想,对于第一次尝试,你有一个鸡蛋和鸡的问题。您希望使用需要用属性替换的值来配置PropertyPlaceholderConfigurer
。这不管用!
SpEL方法应该可以工作,我只是在我的mac (类似UNIX系统)上尝试了一个类似的配置,其值由printenv
on The shell (USER
)列出。结果如预期:
java.io.FileNotFoundException: class path resource [settings-arne.properties] cannot be opened because it does not exist
您可以按照建议的here设置环境变量。另一种方法是添加变量以将其添加到/etc/profile,后者全局地添加env变量。前者是首选。
发布于 2013-03-06 19:23:37
我知道有几个选择,
-DWEB_ENVIRONMENT=prod
JAVA_OPTS
中设置它,请参阅此answer,以了解如何实现该目标。catalina.properties
中通过放置-Druntime_env=dev
设置了环境变量值。https://stackoverflow.com/questions/15254654
复制相似问题