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)
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)
有关更多信息,请参阅此链接