【问题标题】:Asynchronous Scheduling in Java using Quartz使用 Quartz 在 Java 中进行异步调度
【发布时间】:2012-05-07 21:57:03
【问题描述】:

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

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

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

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

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

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

【问题讨论】:

    标签: java asynchronous scheduling quartz-scheduler


    【解决方案1】:
    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?)使这变得容易。此外,您需要做的是在服务器上存储有关您的工作的一些状态。作业完成后,您可以更新数据库或内存中的值。反过来,这将被轮询并显示给用户。

    【讨论】:

      【解决方案2】:

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

      1. 在执行之前和之后处理事件implementing SchedulerListener interface
      2. 对您的工作进行分组
      3. 企业版支持
      4. 最重要的 cron 表达式 here's the documentation

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-02-08
        相关资源
        最近更新 更多