我在Tomcat上运行了一个Spring应用程序。 当我试图关闭它时,它似乎没有这样做。
以下是我的代码:
@Service
public class QueueMsgConsumer
{
@JmsListener(destination = Keys.QUEUE_NAME)
public void processMsg(TextMessage message)
{
//do stuff
}
}
似乎使用@JmsListener启动一个非守护程序线程,当tomcat想要关闭时它不会停止。
关闭我的申请的正确方法是什么?
更新
虽然添加ThreadPoolTaskExecutor' with 'setDaemon(true)
确实导致一分钟左右的最终关闭,但它似乎仍然不优雅。开启跟踪'级别记录我看到了:
11:46:04,190 INFO localhost-startStop-1 support.DefaultLifecycleProcessor:356 - Stopping beans in phase 2147483647
11:46:04,191 DEBUG localhost-startStop-1 support.DefaultLifecycleProcessor:226 - Asking bean 'org.springframework.jms.config.internalJmsListenerEndpointRegistry' of type [class org.springframework.jms.config.JmsListenerEndpointRegistry] to stop
11:46:34,197 WARN localhost-startStop-1 support.DefaultLifecycleProcessor:373 - Failed to shut down 1 bean with phase value 2147483647 within timeout of 30000: [org.springframework.jms.config.internalJmsListenerEndpointRegistry]