我想使用`Spring Expression Language'解析系统环境变量。在spring servlet配置文件中。我的第一个方法是:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/jdbc.#{systemEnvironment.THREAD_ENV}.properties" />
这是抛出异常:
Caused by: org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 18): Field or property 'THREAD_ENV' cannot be found on object of type 'java.util.Collections$UnmodifiableMap'
然后我试过了:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/jdbc.#{systemEnvironment['THREAD_ENV']}.properties" />
和
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/jdbc.#{systemEnvironment[THREAD_ENV]}.properties" />
哪两个都失败并解决为空字符串。我正在使用Tomcat6,我在重启Tomcat服务器之前导出了这个变量:
export THREAD_ENV=live;
/etc/init.d/tomcat6 restart;
想提一下这三种方法都适用于我的一些Tomcat6实例但不是全部 - 这可能是造成这种奇怪行为的原因吗?知道我做错了吗?
答案 0 :(得分:6)
SpEL变量为systemProperties
,而不是systemEnvironment
。
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="/WEB-INF/jdbc.#{systemProperties['THREAD_ENV']}.properties" />