我想基于系统属性(即$ {env})在我的spring xml配置中有条件地/动态地显示<value>classpath:/resources/three.sql</value>
值节点。如果$ {env}是dev,那么包括它除了它或者如果那不容易那么只是有条件地从系统属性传入所有值节点。这可能吗?
<bean id="myBean"
class="com.testMyBean">
<property name="scripts">
<list>
<value>classpath:/resources/one.sql</value>
<value>classpath:/resources/two.sql</value>
<value>classpath:/resources/three.sql</value>
</list>
</property>
</bean>
答案 0 :(得分:3)
您可以使用Spring profiles有条件地包含bean。
添加一个beans
包装器元素,其中包含指定的配置文件:
<beans profile="dev">
<bean id="myBean" class="com.testMyBean">
<property name="scripts">
<list>
<value>classpath:/resources/one.sql</value>
<value>classpath:/resources/two.sql</value>
<value>classpath:/resources/three.sql</value>
</list>
</property>
</bean>
</beans>
然后在运行时配置中设置此系统属性(VM参数):
-Dspring.profiles.active="dev"
要指定应用程序的默认配置文件,您可以在web.xml
文件中设置上下文参数:
<context-param>
<param-name>spring.profiles.default</param-name>
<param-value>openshift</param-value>
</context-param>
答案 1 :(得分:1)
如上所述,最佳方式是使用配置文件。
您可以使用多个xml文件,其中文件名是参数化$ {env}变量。
root xml:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
<import resource="classpath:etc/abc-${env}.xml" />
...
<beans
abc-three.xml:(如果$ {env} ==三)
<bean id="myBean" class="com.testMyBean">
<property name="scripts">
<list>
<value>classpath:/resources/one.sql</value>
<value>classpath:/resources/two.sql</value>
<value>classpath:/resources/three.sql</value>
</list>
</property>
</bean>
abc-two.xml:(如果$ {env} ==两个)
<bean id="myBean" class="com.testMyBean">
<property name="scripts">
<list>
<value>classpath:/resources/one.sql</value>
<value>classpath:/resources/two.sql</value>
</list>
</property>
</bean>