是否可以在运行时重新初始化Spring中的bean?

时间:2012-08-07 21:57:56

标签: spring jms

我们有一个全天候在线的Spring网络应用程序。此应用程序使用JMS发送和接收来自其他系统的消息。在大多数情况下,一切都按预期工作。但是,偶尔我们遇到的问题是网络出现故障或后端JMS提供程序(JBOSS 5.1.0.GA)挂起并且必须重新启动。因此,由于各种原因,Web应用程序失去了与JMS提供程序的连接。我们能够重新建立连接的唯一方法是重新启动servlet容器(tomcat)。

有没有办法在运行时重新启动ConnectionFactory bean?我们在applicationContext.xml中定义了以下bean:

      <bean id="jmsConnectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
            <property name="lookupOnStartup" value="false" />
        <property name="cache" value="false" />
        <property name="proxyInterface" value="javax.jms.ConnectionFactory" />
            <property name="jndiTemplate">
                    <ref bean="jndiTemplate" />
            </property>
            <property name="jndiName">
                    <value>ConnectionFactory</value>
            </property>
    </bean>

有没有办法重新启动bean,以便bean重新建立与提供者的连接?我们希望在应用程序处于活动状态时执行此操作,并避免重新启动应用程序或servlet。

这在春天是否可能?

提前致谢。

1 个答案:

答案 0 :(得分:0)

您可以将此connectionFactory包装在Spring提供的ConnectionFactory - CachingConnectionFactory周围,它支持自动恢复连接。

<bean id="connectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
    <property name="targetConnectionFactory" ref="jmsConnectionFactory"/>
    <property name="sessionCacheSize" value="5"/>
</bean>