我想知道是否有可能以某种方式有条件地包括一些属于春天豆类。
在我的applicationContext.xml
我有一个我设置的bean列表:
<bean id="server1Config" class="... />
<bean id="server2Config" class="... />
<bean id="server3Config" class="... />
...
然后我将它们列入一个列表:
<bean class="java.util.ArrayList">
<constructor-arg>
<list>
<ref bean="server1Config"/>
<ref bean="server2Config"/>
<ref bean="server3Config"/>
...
</list>
</constructor-arg>
</bean>
我想有条件地包括server1Config,server2Config,server3Config等,具体取决于${includeServer1} == true
,${includeServer2} == true
等,如果可能的话,只有在标记为包含它们时才初始化这些bean。
为了澄清,它是一个ping服务,检查服务器是否在线,每个bean包含特殊的URL。如果我有5台服务器正在运行,我想设置我的配置includeServer1=true
... includeServer5=true
... includeServer6=false
,如果我关闭服务器2,我就会这样做喜欢在关闭服务器之前更改includeServer2 = false,以免被SMSe轰炸,告诉我server2已离线。
答案 0 :(得分:4)
由于您的名字涉及不同的阶段或环境,弹簧配置文件可能有助于使用。您可以在context.xml中定义这样的bean
<beans profile="dev">
<jdbc:embedded-database id="dataSource">
<jdbc:script location="classpath:com/bank/config/sql/schema.sql"/>
<jdbc:script location="classpath:com/bank/config/sql/test-data.sql"/>
</jdbc:embedded-database>
</beans>
<beans profile="production">
<jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/datasource"/>
</beans>
在示例[1]中,您可以看到两个名为&#34; dev&#34;和&#34;生产&#34;。
在Java中加载配置文件:
ctx.getEnvironment().setActiveProfiles("dev");
加载两个配置文件
ctx.getEnvironment().setActiveProfiles("profile1", "profile2");
以声明方式从CMD行加载:
-Dspring.profiles.active="profile1,profile2"
web.xml中的用法(可以用逗号分隔)
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>spring.profiles.active</param-name>
<param-value>production</param-value>
</init-param>
</servlet>
@Comment:如果你想使用属性来做,并且你可以使用更新的弹簧元素,注释等,请查看本教程[2],使其与属性文件一起使用,如下所示。< / p>
[1] http://spring.io/blog/2011/02/11/spring-framework-3-1-m1-released/ [2] http://kielczewski.eu/2013/11/setting-active-profile-and-property-sources-in-spring-mvc/
答案 1 :(得分:3)
这几乎是@swinkler答案的补充。
他给出了解决方案的第一部分,即使用Spring 3.1+配置文件。
第二部分是使用一种自动注册:
<bean class="java.util.ArrayList" id="serverConfigList"/>
<beans profile="server1">
<bean id="server1Config" class="... />
<bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<property name="targetObject"><ref local="serverConfigList"/></property>
<property name="targetMethod"><value>add</value></property>
<property name="arguments"><ref local="server1Config/></property>
</bean>
</beans>
这样你就可以创建一个empy列表,只添加相关的配置。
答案 2 :(得分:1)
这可以在Spring框架3.1中使用内置的Spring环境配置文件完成。
以下是一些资源: http://java.dzone.com/articles/spring-31-environment-profiles
希望这有帮助。