在 Java Web 应用程序中处理重复性后台任务的策略?

Posted

技术标签:

【中文标题】在 Java Web 应用程序中处理重复性后台任务的策略?【英文标题】:Strategies for handling repetitive background tasks in a Java web application? 【发布时间】:2011-11-20 20:41:50 【问题描述】:

我正在使用 Java EE 6 技术构建个人 Web 应用程序(容器是应用程序服务器,Jboss AS 7)。我从头开始创作 重复的后台任务,我确定了两种可能的情况:

计划任务(例如,每周日晚上发送大量邮件) 基于网络事件触发任务(例如,通过网络操作运行一些长时间的后台更新)

我想要避免的(我不知道是否可行)是让一些后台任务分散在我的平台周围(其中一些使用cron,其他使用TimerTask,db jobs,等等。 .) 变得难以维护。

考虑到前面的两个要求,在 Java Web 应用程序中处理重复性后台任务有哪些不同的方法?

相关:

Scheduled Tasks for Web Applications Scheduled task in a web application?

【问题讨论】:

【参考方案1】:

使用 EE6,您几乎可以在所有使用 TimerService 和 @Timeout 注释的情况下摆脱 Quartz。

而且你不需要编写一行 XML 来让它工作。

EE Night Hacks book 中有一个很好的例子,也可以作为源代码here

您可以将 Timeout 方法添加到处理您的触发 Web 事件的 bean。这样,它们可以被维护在一个地方。也可以通过触发事件修改定时器设置。

【讨论】:

【参考方案2】:

我还是会看看Quartz。我无法评论 TimerService 用 EE6 作为替代品,因为我没有使用过它,但我发现 Quartz 非常有用。

当我使用它时(现在是几年前),它有一个配置文件,与您为 cron 找到的非常相似。您可以使用它来调用执行计划作业所需的任何方法,然后只需提供一些其他机制来按需调用该方法。

【讨论】:

以上是关于在 Java Web 应用程序中处理重复性后台任务的策略?的主要内容,如果未能解决你的问题,请参考以下文章

.Net / Asp.Net Web api 后台任务

Web App 后台任务的暂存槽处理消息

如何在Python Flask框架中运行重复任务

如何在基于 servlet 的 Web 应用程序中运行后台任务?

如何在基于servlet的Web应用程序中运行后台任务?

Android Service 和线程中运行的重复性任务