Spring是否支持嵌套的SpEL表达式?

时间:2016-10-04 10:47:12

标签: java spring

这是我的属性文件:

base1.jdbc.password=pass1 base2.jdbc.password=pass2 base3.jdbc.password=pass3

我有一个名为%DATABASE%的环境变量,可以是 base1 base2 base3

如何读取存储在环境变量中的数据库的密码属性?我想过这样的事情:

<property name="password" value="${#{systemProperties['DATABASE']}.jdbc.password}"/>

但不确定它是否正确。

2 个答案:

答案 0 :(得分:0)

在应用程序上下文xml中使用以下配置

<bean 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location">
        <value>##YOUR PROPERTIES FILE NAME###</value>
    </property>
</bean>

您可以从相关问题(How do you configure a Spring bean container to load a Java property file?

中获取详细信息

此处给出了PropertyPlaceholderConfigurer的说明(http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/beans/factory/config/PropertyPlaceholderConfigurer.html

使用<value>标记

中包含的属性文件的名称

以下是我在示例项目中如何使用属性的示例。我有一个名为processRetryPolicy的bean,其属性是从属性文件中加载的。

<bean id='processRetryPolicy' class='com.poc.process.model.ProcessRetryPolicy' >
    <property name="isActive" value="${process.executor.conn.retry.policy.isActive}"/>
    <property name="intervalType" value="${process.executor.conn.retry.interval.type}"/>
    <property name="intervalvalue" value="${process.executor.conn.retry.interval.value}"/>
    <property name="retryPolicy" value="${process.executor.conn.retry.default.policy}"/>
</bean> 

属性在属性文件中定义为

process.executor.conn.retry.policy.isActive = true
process.executor.conn.retry.interval.type = HOUR
process.executor.conn.retry.interval.value = 1
process.executor.conn.retry.default.policy = Retry

要添加环境属性,我在其中一个弹簧批处理应用程序中使用了以下内容: -

<property name="environment" value="#{jobParameters['env.type']}"/>

环境类型作为运行时参数传递,如下所示

java -Xmx12288m -D<<List of Params and Values>> env.type=$env 

在spring core中使用spring表达式语言(http://docs.spring.io/spring/docs/3.0.x/spring-framework-reference/html/expressions.html

的另一种方法

你的表情看起来是正确的。

答案 1 :(得分:0)

添加属性占位符

<bean id="propertyPlaceholderConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 <property name="locations">
 <list>
 <value>classpath:xxxxx.properties</value>
 </list>
 </property>
</bean>

然后

<bean id="bean" class="xxx.class">
 <property name="password" value="#{systemProperties['DATABASE']}.jdbc.password"/>     
</bean>