服务器重新启动时如何处理 Quartz 简单触发器

How to handle Quartz simple trigger when server is restarted

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

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

来自石英 doc:

it keeps all of its data in RAM.... The drawback is that when your application ends (or crashes) all of the scheduling information is lost

因此,您必须切换到 JDBCJobStore。

我正在寻找类似问题的答案并且能够解决它而不是 Tomasz Nurkiewicz 的答案,但这不是一个完整的解决方案。
考虑到您的情况,我在 freeformatter 的帮助下创建了一个 cron-expression,因此您的代码应该如下所示

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