包含/排除Spring Bean属性列表值节点

时间:2014-01-20 12:08:57

标签: java xml spring

我想基于系统属性(即$ {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>

2 个答案:

答案 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>