Quartz Scheduler - 待机直到第二天

时间:2017-04-03 14:55:31

标签: java quartz-scheduler job-scheduling

如何在第二天之前使Quartz Scheduler处于待机状态?

方案: 我是在上午3点到7点之间每隔10分钟在文件夹中搜索一个文件(JOB_A)。

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

如果JOB_A中的单个文件未在MON上找到,则应在TUE上继续处理。 如果JOB_A中的单个文件在MON上是FOUND,则JOB_B应该开始,但是JOB_A应该在当天退出并在凌晨3点再次开始检查。

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

任何帮助都将不胜感激。

RayK

1 个答案:

答案 0 :(得分:0)

您可以使用startAt(Date)方法替换JOB_A的触发器,因此作业不会在给定日期之前启动。

以下是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);