gpt4 book ai didi

jakarta-ee - ScheduledExecutorService Java EE 如何在 Web 服务(JBoss)中启动它?

转载 作者:行者123 更新时间:2023-12-01 16:25:43 24 4
gpt4 key购买 nike

在 Java SE 中,当我运行 main() 时,我有一个计划任务等待执行。

但在 Java EE (JBoss Webservice) 中,这些方法会在出现 Web 请求时运行。

有没有办法在应用程序部署后开始调度任务?

我想使用 ScheduledExecutorService .

最佳答案

警告:此答案解决了未实现 Jakarta Concurrency 的应用服务器,例如 Apache TomcatEclipse Jetty规范。该规范定义了“托管”执行器服务和注释@Schedule。 “完整平台”Jakarta 的用户,例如 JBoss/WildFly、Glassfish/Payara 等 ( list ) 应该使用该工具来获得更简单、更轻松的任务调度方法。

<小时/>

ServletContextListener

一个Servlet仅当 Request 时运行来自用户。设置任务(例如调度程序)必须在处理第一个请求之前完成。

这就是 ServletContextListener 的目的界面。术语“Servlet 上下文”仅表示您的 Web 应用程序。 “监听器”部分意味着将自动调用实现该接口(interface)的类。

enter image description here

具体来说,将调用两个方法中的任何一个。部署 Web 应用程序时调用一种方法,关闭 Web 应用程序时调用另一种方法。使用其中之一启动您的 ScheduledExecutorService。使用另一个来终止您的 ScheduledExecutorService。终止非常重要,因为您的执行器的线程池可能会在您的 Web 应用程序停止很长时间后,甚至在您的 Web 容器关闭后继续运行。

JavaDoc of interface ServletContextListener showing two methods, contextInitialized and contextDestroyed

当您编写实现此接口(interface)的类时,您可以使用不同的途径进行部署。最简单的方法是用 @WebListener 来标记类(class)。注解。您的 Web 容器将自动检测此类标记的类并加载它。 Web 容器完成初始化您的 Web 应用程序后,但在处理第一个传入请求之前,您的 ServletContextListener 将被调用。此行为由 Servlet spec 保证2.3 及更高版本。所以它适用于 all Web containers :Tomcat、Jetty、TomEE、Glassfish、JBoss、WildFly 等

example code implementing the interface, with "@WebListener" annoctaion for automatic deployment by any web container

ServletContextListener 架构是对 Servlet 的明智补充,对于更严肃的 Web 应用程序至关重要。该设计总体上不错,但缺少一项重要功能:如果在设置过程中出现问题,监听器将无法停止 Web 应用程序的部署。如果您的数据库已关闭,或者所需的 Web 服务无法访问,或者其他重要资源不可用,您可能不希望启动您的 Web 应用程序。 Servlet 规范无法满足这一需求。解决方法是以某种方式在监听器和 servlet 之间进行通信,也许在 context “attributes” 中设置一些标志。并在您的 servlet 中检查该标志。

<小时/>

我给了一个talk on this subject of ServletContextListener at Devoxx Morocco 2017 。上面显示了我的一些幻灯片,整个幻灯片是 available as a PDF

关于jakarta-ee - ScheduledExecutorService Java EE 如何在 Web 服务(JBoss)中启动它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62154201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com