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);
如何让 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);