1

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

例如,如果我的自定义属性为truehibernate.hbm2ddl.auto ,我想将我的 persistence.context.xml 中的 hibernate 属性设置为仅验证。我知道我可以像这样指定默认值:com.github.dpeger.jpa.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>
4

1 回答 1

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>
于 2017-01-25T04:49:02.940 回答