当前位置: 首页 > 知识库问答 >
问题:

如何在Quartz库中配置cronSchedule()/cron表达式,使其每天在11am、12am、15am、17am等时间运行相同的作业?

陆高峰
2023-03-14

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

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

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

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

共有1个答案

夏和雅
2023-03-14

是的,这是可以做到的:

// 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();

下面的官方例子证实了这一点--参见“每周三下午2:10和2:44开火”。

 类似资料:
  • 我有一个工作,需要执行两次每天在不同的时间。例如10:00和15:30。我怎样才能做到这一点?

  • 我明白了如何生成一个cron表达式来在每天的特定时间运行,现在我已经在中午和15:30 mon-sat运行了。不过,我希望是在周六15:00而不是15:30。有什么方法可以把它写成cron表达式吗?或者我需要为周六做一个单独的触发?

  • 现在我每天下午3点运行我的cron作业 但是我想一天运行两次cron作业。上午10点30分和下午2点30分 我相信此命令将在上午 10:30 运行。我应该如何在下午 2:30 运行它?

  • 我想基于cron表达式运行一个作业,但它应该在rest调用后从DB中查找cron表达式。 一旦rest api被命中,它应该等待cron表达式,我们可以从数据库或任何方法获得它,然后它应该在指定的时间启动。 它的工作方式与普通的方法调用类似。

  • 如何使用cron表达式实现我想要的内容? 谁能解释一下石英晶体的这种行为? 提前谢了。

  • 如何将Airflow dag配置为每天在指定时间执行,无论发生什么,就像crons一样。 我知道使用 TimeSensor 可以获得类似的行为,但在这种情况下,这取决于传感器任务,并且可能与 dag 执行时间冲突。 示例:对于传感器方法,如果我让传感器在0小时15分钟运行,但如果dag在稍后执行,则我的任务会延迟,因此即使对于传感器方法,我也需要确保Dag在正确的时间执行。 那么如何确保Dag在指