1

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

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

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

4

2 回答 2

3

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

话虽如此,我建议不要使用 Quartz 进行这种调度,并使用java.util.concurrent.Executors.newScheduledThreadPool(). 当涉及到简单的重复任务时,它比 Quartz 容易得多。

于 2009-11-06T10:58:11.480 回答
1

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

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

while (running) {
    Thread.sleep(1000 * 120);
    doStuff();
}
于 2009-11-06T10:39:22.827 回答