我想知道是否可以评估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>
答案 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>