评估Spring的context.xml中的属性(基本模板)

时间:2017-01-24 14:04:48

标签: java spring templates spring-el property-injection

我想知道是否可以评估Spring的xml配置文件中的属性。我目前已经使用PropertyPlaceholderConfigurer注入了属性。但我想要实现的是注入一个值,如果某个属性是 true ,并注入另一个值,如果它是 false

例如,我想将persistence.context.xml中的hibernate属性hibernate.hbm2ddl.auto设置为 validate ,如果我的自定义属性com.github.dpeger.jpa.validate true < / em>的。我知道我可以指定默认值:

<property name="jpaProperties">
    <map>
        <entry key="hibernate.hbm2ddl.auto" value="${com.github.dpeger.jpa.validate:none}" />
        ...
    </map>
</property>

但有可能以某种方式评估一个属性&#39;价值可能是这样的:

<property name="jpaProperties">
    <map>
        <entry key="hibernate.hbm2ddl.auto" value="${com.github.dpeger.jpa.validate?validate:none}" />
        ...
    </map>
</property>

1 个答案:

答案 0 :(得分:1)

第一个选项:

您可以使用#{} EL表达式并在此表达式中插入${}占位符:

<property name="jpaProperties">
    <map>
        <entry key="hibernate.hbm2ddl.auto" 
            value="#{${com.github.dpeger.jpa.validate}?'validate':'none'}" />
        ...
    </map>
</property>

第二个选项:

您可以创建单独的属性bean(注意,您必须定义xmlns:util命名空间和spring-util.xsd位置):

<beans ...
    xmlns:util="http://www.springframework.org/schema/util"
    xsi:schemaLocation="...
        http://www.springframework.org/schema/util
        http://www.springframework.org/schema/util/spring-util.xsd">


    <util:properties id="props" location="classpath:appliction.properties"/>

    ...

</beans>

现在您可以通过id:

在EL表达式中使用此属性bean
<property name="jpaProperties">
    <map>
        <entry key="hibernate.hbm2ddl.auto" 
            value="#{props['com.github.dpeger.jpa.validate']?'validate':'none'}" />
        ...
    </map>
</property>