Quartz Cron 触发器每两天运行一次

Rid*_*ris 2 java quartz-scheduler

我想让我的 cron 每两天执行一次工作。因此,如果我在 5 月 25 日执行作业,它将在 25、27、29、31、6 月 2 日、6 月 4 日运行。

但问题是,在 5 月 31 日结束后,cron 将重置并在 6 月 1 日、6 月 3 日、6 月 5 日开始运行......而不是 6 月 2 日、6 月 4 日......

下面是我的代码..

CronTrigger cronTrigger = newTrigger()
      .withIdentity("trigger1", "testJob")
      .startAt(startDate)
      .withSchedule(CronScheduleBuilder.cronSchedule( * * * 1/2 * ?")
          .withMisfireHandlingInstructionDoNothing())
      .build();
Run Code Online (Sandbox Code Playgroud)

San*_*jay 6

CronTrigger cronTrigger = newTrigger()
    .withIdentity("trigger1", "testJob")
    .startAt(startDate)
    .withSchedule(
         CronScheduleBuilder.cronSchedule(" * * * */2 * ?")
             .withMisfireHandlingInstructionDoNothing()
    ).build();  
Run Code Online (Sandbox Code Playgroud)

所以你需要替换1/2*/2. 这里的*意思是每天*/2意思是每隔一天。


更新

CronTrigger不能用于每 2 天间隔运行一次,因为它总是从每个月的 1 天开始,即使最后一次 jab 执行是在 31 日,但如果是每月的 2 天,它将在每月的 1 天运行。您可以将其设置为在 48 小时后运行,而不是每 2 天运行一次

请看看这是否对您有帮助:

trigger = newTrigger()
    .withIdentity("trigger3", "group1")
    .startAt(tomorrowAt(15, 0, 0)  // first fire time 15:00:00 tomorrow
    .withSchedule(
        simpleSchedule()
            .withIntervalInHours(2 * 24) // interval is actually set at 48 hours' worth of milliseconds
            .repeatForever()
    ).build();
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅链接