Quartz Cron触发器每隔2天运行一次

时间:2014-05-26 09:01:35

标签: java quartz-scheduler

我想让我的cron每隔第二天执行一次工作。因此,如果我在5月25日执行工作,它将在6月25日,27日,29日,3月6日,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();

2 个答案:

答案 0 :(得分:4)

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

每天从'* / 2听'*'代替1/2,* / 2表示每两天一次。

更新:Crontrigger不能用于每隔2天运行一次,因为它总是从每个月的第1天开始,即使最后一次执行jab是在31,它将在第1天运行月份,而不是每月的第二天。您可以将其设置为每隔2天48小时后运行,请查看这是否有助于您

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

有关详细信息,请参阅This链接

答案 1 :(得分:2)

quartz cron网站,我发现我无法使用cronTrigger设置每个第二天的工作执行。

"乍一看,您可能会想要使用CronTrigger。但是,如果这是真的 每两天,CronTrigger都不会工作。为了说明这一点,只需思考 在一个典型的月份(28-31)中有多少天。一个cron表达式,如" 0 0 5 2/2 *?" 会给我们一个触发器,它会在每个月初重新开始计算。 这意味着我们将在7月30日和8月2日获得随后的解雇 间隔三天,而不是两天。"