【问题标题】:Quartz Scheduler - Standby Until Following DayQuartz Scheduler - 待机到第二天
【发布时间】:2017-04-03 23:42:58
【问题描述】:

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

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

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

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

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

任何帮助将不胜感激。

雷克

【问题讨论】:

    标签: java quartz-scheduler job-scheduling


    【解决方案1】:

    您可以用一个新的触发器替换 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);
    

    【讨论】:

    • 我相信这可以作为一次性触发器的替代品。但是,当我尝试用“newTrigger”替换“newTrigger”时,WED 会发生什么?我想我可以在触发键中添加一个日期以使其独一无二。
    • @DropOfGoldenSun 其实你可以重复使用oldTrigger 的密钥。代码在同一个 Quartz 的示例页面中,但我会更新我的答案。
    猜你喜欢
    • 2013-05-23
    • 2012-08-22
    • 1970-01-01
    • 2015-04-02
    • 2012-12-25
    • 1970-01-01
    • 2017-02-02
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多