4

我有一个在 Tomcat 7 中运行的 Spring 3 应用程序。

我正在使用 Spring 的 ThreadPoolTask​​Executor 来处理队列中的一些消息。我有一个使用 @Scheduled 的 bean,它每 100 毫秒向执行程序提交一次任务。

但是,我注意到当我关闭 Tomcat 时,它会警告我它无法关闭某些任务。

SEVERE: The web application appears to have started a thread named [taskExecutor-9] but has failed to stop it. This is very likely to create a memory leak.
Nov 28, 2012 1:29:18 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads

有谁知道如何解决这个问题?

4

2 回答 2

1

您是否在 executor bean 上注册了关闭方法?我可以通过这样做来解决这个问题:

@Bean(destroyMethod="shutdown")
     public Executor taskExecutor() {
         return Executors.newScheduledThreadPool(100);
     }

参考:

http://docs.spring.io/spring/docs/3.2.0.RC1_to_3.2.0.RC2/changes/docdiffs_org.springframework.scheduling.annotation.html

于 2014-12-21T13:54:09.760 回答
0

setWaitForTasksToCompleteOnShutdown(true)连接时尝试拨打电话ThreadPoolTaskExecutor

文档在这里:http ://static.springsource.org/spring/docs/3.0.x/javadoc-api/org/springframework/scheduling/concurrent/ExecutorConfigurationSupport.html#setWaitForTasksToCompleteOnShutdown(boolean ),它说的是默认值是假的。

于 2012-11-28T15:22:08.363 回答