gpt4 book ai didi

java - 服务器重启时如何处理Quartz简单触发

转载 作者:太空宇宙 更新时间:2023-11-04 06:10:20 28 4
gpt4 key购买 nike

我使用 Quartz 简单触发器和 RAMJobStore 在 Spring MVC 中进行调度。在服务器运行之前它工作正常。当我停止服务器并重新运行程序时,先前安排的作业未运行。

场景:
最初我安排作业分别在下午 1 点和下午 1:30 运行。第一个作业(下午 1 点)成功执行,在 1:15 我停止了服务器并重新启动它。但是1:30的作业并没有执行。

最佳答案

我正在寻找类似问题的答案,并且能够解决它,感谢 Tomasz Nurkiewicz的答案,但它不是一个完整的解决方案。
考虑到您的情况,我在 freeformatter 的帮助下创建了一个 cron 表达式所以你的代码应该是这样的

try {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.HOUR_OF_DAY, current_hour_of_day);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
Date date = cal.getTime();

//Run's job after every 30mins starting from 1pm
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule("0 0/30 13 ? * * *").inTimeZone(TimeZone.getDefault());
JobKey jobKey = JobKey.jobKey("testing");
JobDetail quartzJob = JobBuilder.newJob(SchedulerTask.class)
.withIdentity(jobKey).build();
TriggerBuilder<Trigger> trigger = newTrigger();
trigger.withIdentity("testing");
trigger.withSchedule(cronScheduleBuilder
//It fires the scheduler once for n number of missed events
.withMisfireHandlingInstructionFireAndProceed());
trigger.startAt(date);
Trigger build = trigger.build();
Scheduler quartzScheduler = new StdSchedulerFactory().getScheduler();
quartzScheduler.start();
quartzScheduler.scheduleJob(quartzJob, build);
} catch (SchedulerException | ParseException ex) {
Logger.getLogger(FeatureTesterMain.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
}

Tomasz 的答案没有 trigger.startAt() 部分,因此我错过的时间表没有得到执行。
有关 withMisfireHandlingInstructionFireAndProceed() 政策的更多信息,请阅读此 blog post再次,Tomasz Nurkiewicz

关于java - 服务器重启时如何处理Quartz简单触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28825384/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com