Quartz Scheduler - 待机到第二天

Quartz Scheduler - Standby Until Following Day

如何让 Quartz Scheduler 待机到第二天?

场景: 我从星期一到星期六凌晨 3 点到早上 7 点 (JOB_A) 每 10 分钟在一个文件夹中搜索一个文件。

如果找到该文件,我需要在接下来的 3 小时内每 10 分钟在同一文件夹中搜索第二个文件 (JOB_B)。

如果 JOB_A 中的单个文件在周一未找到,则应在周二继续处理。 如果 JOB_A 中的单个文件在周一被发现,JOB_B 应该开始,但 JOB_A 应该在当天退出并在周二凌晨 3 点再次开始检查。

我可以启动 JOB_A 并且它会进行适当的检查。 找到文件后,我可以踢 JOB_B。 但是,一旦我开始 JOB_B,我就无法在当天剩余时间停止 JOB_A 并在第二天重新开始。

如有任何帮助,我们将不胜感激。

雷克

您可以用一个新的触发器替换 JOB_A 的触发器,该触发器使用 startAt(Date) 方法,这样作业就不会在给定日期之前开始。

这里是 Quartz 文档中关于 how to replace a trigger 的代码,结合使用 DateBuilder 以更简单的方式获取明天的日期:

// retrieve the old trigger
Trigger oldTrigger = sched.getTrigger(triggerKey("oldTrigger", "group1");

// obtain a builder that would produce the trigger
TriggerBuilder tb = oldTrigger.getTriggerBuilder();

// update the schedule associated with the builder, and build the new trigger
Trigger newTrigger = tb
    .withSchedule(cronSchedule(yourCronExpression))
    .startAt(DateBuilder.tomorrowAt(3,0,0))
    .build();

// tell the scheduler to remove the old trigger with the given key, and put the new one in its place
sched.rescheduleJob(oldTrigger.getKey(), newTrigger);