如何在JMS服务器未连接时正常关闭Spring上下文启动?

时间:2015-11-11 17:39:59

标签: java spring spring-jms

我使用Spring JMS连接到ActiveMQ,但有时ActiveMQ服务器可能处于脱机状态。为了使我的应用程序在达到一些超时后停止重试连接,我使用以下内容:

<jms:listener-container factory-id="jmsListenerContainerFactory"
        connection-factory="connectionFactory"
        back-off="jmsBackOff" />

<bean id="jmsBackOff" class="org.springframework.util.backoff.ExponentialBackOff">
    <property name="maxElapsedTime" value="600000"/>
</bean>

但问题是我希望应用程序在达到此超时时死掉,从而中断Spring上下文启动过程。

我尝试创建自己的DefaultMessageListenerContainer并重写其stop()方法以抛出异常,但这只会杀死自己的线程,从而停止上下文启动而不是关闭它。

有什么办法可以优雅地关闭Spring上下文启动吗?或者,更好的是,在返回BackOffExecution#STOP时添加要执行的挂钩?

1 个答案:

答案 0 :(得分:0)

为什么不直接使用System.exit(-1)而不是在DefaultMessageListenerContainer的stop方法中抛出异常?