【问题标题】:Where to invoke ExecutorService.shutdown() in web application [duplicate]在 Web 应用程序中调用 ExecutorService.shutdown() 的位置 [重复]
【发布时间】:2013-08-29 13:23:19
【问题描述】:

我想知道在 Web 应用程序中关闭 ExecutorService 的正确位置是什么?

根据文档ExecutorService 应该关闭,但是代码中的正确位置是在 Web 应用程序中执行此操作吗?

更新:抱歉,不清楚。让我们考虑在 Java EE 下使用 MVC(例如 Spring MVC)的基于 Web 的应用程序。它有控制器->外墙->服务。它没有 EJB。

【问题讨论】:

  • 请澄清/集中您的问题,它太宽泛了:仅 Servlet 还是 EJB?从 AsyncServlet、@Asynchronous 和 EJB MDB 的角度来看,我很想说没有必要搜索这样的位置(并将其留给容器来管理线程)。

标签: java multithreading executorservice application-shutdown servlet-container


【解决方案1】:

“Java EE”涵盖了广泛的技术。如果你在谈论一个 servlet,容器将在它被关闭时调用destroy(),你可以在那里关闭你的ExecutorService。如果服务由托管 bean 拥有,您可以使用 @PreDestroy 标记一个方法来这样做。

【讨论】:

    【解决方案2】:

    您可以使用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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2016-01-29
      • 1970-01-01
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多