1

我需要一种在 Java 中实现异步作业调度的机制,并且正在研究Quartz Scheduler,但它似乎没有提供必要的功能。

更具体地说,我的跨不同节点运行的应用程序有一个基于 Web 的 UI,用户可以通过它安排几个不同的作业。当作业完成时(将来的某个时间),它应该向 UI 报告,以便用户了解其状态。在此之前,用户应该可以选择编辑或取消计划的作业。

一种实现方法是让调度程序线程在其中一个节点的后台持续运行,并收集 JobDetail 定义以执行作业。

无论如何,有两个问题(适用于单节点或多节点场景):

  1. Quartz 是否允许修改或取消已安排的作业?
  2. 如何实现“回调”机制,以便将作业执行结果报告回 UI?

非常感谢任何代码示例或指针。

4

2 回答 2

4
  1. Quartz 是否允许修改或取消已安排的作业?

您可以“取消计划”工作:

scheduler.unscheduleJob(triggerKey("trigger1", "group1"));

或删除作业:

scheduler.deleteJob(jobKey("job1", "group1"));

如文档中所述:

http://quartz-scheduler.org/documentation/quartz-2.x/cookbook/UnscheduleJob

请注意,两者之间的主要区别是取消调度作业会删除给定的触发器,而删除作业会删除给定作业的所有触发器。

  1. 如何实现“回调”机制,以便将作业执行结果报告回 UI?

通常,在网络世界中,您将轮询网络服务器以获取更改。根据您的 Web 框架,可能有一个可用的组件(Push、Pull、Poll?)使这变得容易。此外,您需要做的是在服务器上存储有关您的工作的一些状态。作业完成后,您可以更新数据库或内存中的值。反过来,这将被轮询获取并显示给用户。

于 2012-05-07T23:50:47.393 回答
1

用Quarz完成@johncarl的答案也有这个

  1. 执行 SchedulerListener 接口执行前后处理事件
  2. 将您的工作分组
  3. 企业版支持
  4. 最重要的 cron 表达式是文档
于 2012-05-08T02:32:28.103 回答