【问题标题】:what does "delay" mean when implementing StatefulJob?实现StatefulJob时“延迟”是什么意思?
【发布时间】:2011-05-19 14:18:31
【问题描述】:

我已经知道当使用石英并且我们不想要并发作业时,我们需要实现 StatefulJob 并且作业不会同时运行但我想知道在执行完成之前发生的新触发器是什么意思(xx ) 方法会延迟吗?这是否意味着一旦工作完成,被延迟的工作会立即被解雇,还是会被跳过并等待下一次触发? 我还想为每个因为已经在运行而没有被触发的触发器保留一个记录,那么石英是否以某种方式告诉我这些信息?

【问题讨论】:

    标签: java jboss seam quartz-scheduler


    【解决方案1】:

    “延迟”意味着 Quartz 不会选择触发触发,即使它的下一个触发时间已到。

    一旦正在运行的作业实例完成,触发器将再次成为触发的候选对象,如果下一个触发时间已到(或过去),它将被触发。

    需要注意的是,被阻塞的触发器会受到失火处理的影响。如果它被阻止的时间超过了您配置的失火阈值(默认为 1 分钟),则将应用触发器的失火指令,这取决于您为该触发器选择的内容,可能会导致触发器的触发跳过,或者可能导致快速重复(试图赶上)。

    您可以实现一个 TriggerListener 以收到有关失败的通知,但没有简单的事件来阻止触发器执行。

    【讨论】:

    • 哦,我明白了,所以如果我将其配置为“MISFIRE_INSTRUCTION_DO_NOTHING”,触发器将被跳过。无论如何,我对 TriggerListener 进行了一些研究并想出了该怎么做,但是当他们说:“当 JobDetail 即将执行时,调度程序调用 jobExecutionVetoed(JobExecutionContext context)(已发生关联的触发器),但是 TriggerListener 被否决这是处决。”究竟会发生什么?我的应用程序怎么知道这个函数被调用了?
    • 您的应用程序会知道该函数已被调用,因为您的应用程序实现了 TriggerListener 接口。
    • MISFIRE_INSTRUCTION_DO_NOTHING 不会导致跳过,它会导致下一次触发时间保持原样(现在是过去,如果发生了失火) - 因此触发器将在运行作业时尽快触发这是阻止它完成。
    • jobExecutionVetoed() 方法与失火无关。它与否决执行的听众有关。这是侦听器上专门针对失火的事件/方法。
    • 这取决于触发器的类型,但它们都有一个失火指令,应该做你想做的事。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 2013-02-10
    • 2019-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多