如何在Quartz库中配置cronSchedule()/ cron表达式,以便每天上午11点,上午12点,上午15点,上午17点等运行相同的工作?

时间:2018-04-23 10:05:03

标签: java quartz-scheduler quartz

我正在使用Quartz库将cron计时器添加到我的应用程序中。

示例用法解释为here,在此API中指定运行周期通过所谓的“cron string”(cron表达式)完成 - 在examples here和{{3中对此进行了详细解释}}

CronTrigger trigger = newTrigger()
    .withIdentity("trigger1", "group1")
    .withSchedule(cronSchedule("0/20 * * * * ?")) // cron string
    .build();

我理解如何运行指定起点+周期的任务(例如,每天上午11点,每周五等)。

但我需要每天上午11点,中午12点,下午3点,晚上7点等运行它 - 我可以列举确切的时间。我该如何指定? 我需要每天完成相同的任务(工作)。

创建如此多的Trigger(每个都有单独的cron表达式)是愚蠢的。有一个很好的解决方案吗?

official docs here,文档说:

  

, - 用于指定其他值。例如,“MON,WED,FRI” in   星期几字段表示“星期一,星期三和星期五”。

所以这可能有效:"0 0 11am,12am,3pm,7pm * * ?"

P.S。或者我所能做的就是每小时创建一个单独的触发器,然后将所有这些触发器(具有相同的作业)添加到调度程序,如

myScheduler.scheduleJob(sameJob, trigger11am);
myScheduler.scheduleJob(sameJob, trigger12am);
myScheduler.scheduleJob(sameJob, trigger3pm);
myScheduler.scheduleJob(sameJob, trigger7pm);

1 个答案:

答案 0 :(得分:0)

是的,这就是它可以做到的方式:

        // setup CronTrigger
        // misfire policies (when app was down at scheduled time):
        // https://www.nurkiewicz.com/2012/04/quartz-scheduler-misfire-instructions.html            
        Trigger trigger = TriggerBuilder
                .newTrigger()
                .withIdentity("triggerName", "myGroupName")
                .withSchedule(
                    // at 11:30am, 12:30am, 03:30pm, 06:30pm, etc every day, including Sunday, Monday, days-off                         
                    CronScheduleBuilder.cronSchedule("0 30 11,12,15,18,21,23 * * ?")
                    // don't run missed jobs (missed when app was down) 
                    .withMisfireHandlingInstructionDoNothing())             
                .build();

此处official examples at the bottom确认一下 - 请参阅“每周三下午2:10和下午2:44点火”。