【问题标题】:Quartz StatefulJob / non-StatefulJobQuartz StatefulJob / 非StatefulJob
【发布时间】:2012-08-11 09:54:50
【问题描述】:

能否请您向我解释一下 Quartus 中 StatefulJob 的确切平均值以及它与无 StatefulJob 的区别?

【问题讨论】:

    标签: java quartz-scheduler


    【解决方案1】:

    StatefulJob 接口,提供 2 个东西,

    首先:任何时候都只会运行一个作业

    second:在 (SimpleTriggerBean) 中,您将不必担心作业运行的持续时间。这意味着下一次运行将在上一次结束后的延迟时间后完成。

    【讨论】:

      【解决方案2】:

      StatefulJob 保证一次只会运行一项作业。例如,如果您安排您的作业每 1 分钟运行一次,但您的作业需要 5 分钟才能完成,那么在前一个作业完成之前,该作业将不会再次运行。

      这有助于确保在任何给定时间只有一个作业在运行。

      下一个作业将按下一个计划运行,而不是在上一个作业完成后立即运行。

      【讨论】:

      • 我知道,但我想了解更多信息,例如,如果延迟时间小于作业的运行时间,结束当前作业后会发生什么?我的意思是下一个将立即触发或延迟时间后运行?
      • 您的意思是下一个将在第一次运行后 5+1 分钟后运行(根据您的示例)?
      • 是的。为什么?你希望它立即运行它吗?
      • 我不想立即运行它。我想知道它在这种情况下的行为。
      【解决方案3】:
      jobDetail.getJobDataMap().put("type","FULL");
      

      这一行将决定我们是使用有状态还是无状态。

      1. 如果我们传递参数,那么它将是有状态的。
      2. 如果没有 statefull,就无法在 execute 方法中传递参数
      3. 如果我们修改任何值,在执行时间已满的状态下,执行作业将丢失,不会在同时处理时间重新触发。
      4. 一次只会执行一个作业,第二个作业将处于休眠状态,直到第一个作业完成。
      5. 在多调度进程中,第二个作业参数将在运行时共享给第一个作业。这是多调度过程中的一种缺点。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-20
        • 1970-01-01
        相关资源
        最近更新 更多