我有一个使用Spring TaskExecutor的Web应用程序。任务执行程序在Web应用程序第一次加载时启动,并且该线程运行Web应用程序的整个生命周期。自从我将此线程添加到应用程序后,Oracle Application Server将不再正常关闭。我的猜测是,OAS没有关闭,因为我没有正常关闭代码中任何地方的任务执行程序线程。在哪里最好的地方是关闭网络应用程序中的任务执行器?我在Spring 2.5.6上使用Java 5。当Web服务器关闭时,关闭Web应用程序中的TaskExecutor
这里是我使用的任务执行:
<bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"/>
谢谢。 Spring有ApplicationListener接口。任何想法如何我可以取消LinkedBlockingQueue.take()块?我试过myQueue.notifyAll()。 – 2010-02-12 14:53:58
我的标准答案是“永远不要在任何地方使用阻止等待”。或者注入一个称为“毒丸”的特殊对象或中断该线程,如http://stackoverflow.com/questions/812342/how-to-interrupt-a-blockingqueue-which-is-blocking-on-take – 2010-02-12 17:07:01