【问题标题】:Quartz job tunning石英作业运行
【发布时间】:2010-12-13 18:53:24
【问题描述】:

你好,我在工作时用石英实现了一些东西。假设一个 cron 设置为每 2 分钟唤醒一次,表达式为 0 0/2 * * * ? .

当您在 13:10:30 运行项目时,第一个操作发生在 13:12:00,第二个操作发生在 13:14:00,其余时间每 2 分 0 秒执行一次。显然,从项目启动到第一次行动发生之间只有 100 万分 30 秒。

无论项目在哪几秒开始,有没有办法让第一次出现尊重 2 分钟?

【问题讨论】:

    标签: java unix jakarta-ee cron quartz-scheduler


    【解决方案1】:

    使用 CronTrigger 类在 Quartz 中配置 Cron 作业。另一种方法是使用SimpleTrigger,您可以使用固定延迟间隔构造它。 SimpleTrigger有多种构造函数,可以指定开始时间、结束时间、重复次数、重复间隔等。

    话虽如此,我还是建议不要使用 Quartz 进行这种调度,而是使用 java.util.concurrent.Executors.newScheduledThreadPool()。在处理简单的重复任务时,它比 Quartz 容易得多。

    【讨论】:

      【解决方案2】:

      Quartz 可以使用 cron 进行调度,它基于日期和时间,而不是持续时间。这意味着您定义的 cron 表达式与机器上的当前时间直接相关,而不是与应用程序启动的时间相关。

      我不知道可以帮助您解决问题的 Quartz 配置。但是,一个解决方案是创建您自己的 Thread,它在您的应用程序启动期间开始,并且在调用方法之前基本上等待 2 分钟:

      while (running) {
          Thread.sleep(1000 * 120);
          doStuff();
      }
      

      【讨论】:

      • 你刚刚给了我一个想法!谢谢,但我会更深入地研究如何正确地做到这一点。
      • Quartz 不是基于 cron 的。它支持语法,但不需要它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-08
      相关资源
      最近更新 更多