【发布时间】:2013-02-21 16:12:23
【问题描述】:
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”
两个版本都在 Windows 中运行,但不在 Amazon EC2 的 Linux AMI 中。
接下来我应该怎么做才能让它发挥作用?
【问题讨论】:
-
另请注意,
#{systemProperties['WEB_ENVIRONMENT']}也不起作用 -
你是如何在 EC2 中启动 tomcat 的?
-
sudo 服务 tomcat7 启动。虽然更愿意在环境中设置它而不是传递 -D 参数
-
哪个用户正在运行tomcat(在
ps auxwww中查找java处理)?我认为 env var 没有被拾取,例如如果不使用 bash 启动 tomcat 或其他用户正在运行 tomcat。 -
tomcat 也作为服务安装,在启动时运行。不知何故,
ps auxwww将 tomcat 显示为运行 tomcat 的用户!我是 linux 的菜鸟,所以不知道这意味着什么..
标签: java linux spring amazon-ec2 spring-el