我想知道什么是在Web应用程序中关闭ExecutorService
的正确位置?在哪里调用Web应用程序中的ExecutorService.shutdown()
根据文档ExecutorService
应该关闭,但代码中的正确位置在Web应用程序中执行该操作?
更新:对不起。让我们在Java EE下考虑一个带有MVC的基于Web的应用程序(例如Spring MVC)。它有控制器 - >外墙 - >服务。它没有EJB。
我想知道什么是在Web应用程序中关闭ExecutorService
的正确位置?在哪里调用Web应用程序中的ExecutorService.shutdown()
根据文档ExecutorService
应该关闭,但代码中的正确位置在Web应用程序中执行该操作?
更新:对不起。让我们在Java EE下考虑一个带有MVC的基于Web的应用程序(例如Spring MVC)。它有控制器 - >外墙 - >服务。它没有EJB。
“Java EE”涵盖了大量的技术。如果您正在谈论一个servlet,那么容器将在关闭时调用destroy()
,并且您可以在那里关闭您的ExecutorService
。如果服务属于受管理的bean,则可以使用@PreDestroy
来标记要执行此操作的方法。
可以使用得到一个钩ServletContextListener
:
@WebListener
public class MyServletContextListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent e) {
log.info("Hello");
}
public void contextDestroyed(ServletContextEvent e) {
log.info("Bye");
// Do cleanups here
}
}
请澄清/集中你的问题,它太广:Servlet的唯一或EJB呢?从AsyncServlet,@Asynchronous和EJB MDB的角度来看,我很想说没有必要搜索这样一个位置(并将它留给容器来管理线程)。 – Beryllium