使用Spring Expression Language解析系统环境变量

时间:2014-05-27 22:26:27

标签: spring environment-variables spring-el

我想使用`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实例但不是全部 - 这可能是造成这种奇怪行为的原因吗?知道我做错了吗?

1 个答案:

答案 0 :(得分:6)

SpEL变量为systemProperties,而不是systemEnvironment

<bean id="propertyConfigurer"
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
    p:location="/WEB-INF/jdbc.#{systemProperties['THREAD_ENV']}.properties" />