【问题标题】:Evaluate properties in Spring's context.xml (basic templating)评估 Spring 的 context.xml 中的属性(基本模板)
【发布时间】:2017-01-24 14:04:48
【问题描述】:

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

例如,如果我的自定义属性 com.github.dpeger.jpa.validatetrue,我想将我的 persistence.context.xml 中的休眠属性 hibernate.hbm2ddl.auto 设置为 validate。我知道我可以像这样指定默认值:

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

但是是否有可能以某种方式评估属性的值可能是这样的:

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

【问题讨论】:

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


    【解决方案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>
    

    【讨论】:

    • 谢谢。第一个选项实际上是我自己根据现有答案得出的结论。虽然我不喜欢同时使用 SpEL 和属性占位符的表示法,但我会坚持使用此选项。
    猜你喜欢
    • 1970-01-01
    • 2018-07-03
    • 2011-07-13
    • 1970-01-01
    • 2014-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-21
    相关资源
    最近更新 更多