如果应用程序停止,石英调度程序将获得下一个调度程序时间

quartz scheduler get next scheduler time if the application stopped

目前我在我的应用程序中使用石英调度程序来执行调度程序。我的应用程序是 运行 在 tomcat 服务器上。如果服务器已启动,则调度程序将根据提供的开始时间开始触发任务。

我的问题是,如果任务被安排为每 10 分钟间隔执行一次,并且 tomcat 由于某些原因停止并在大约两天后恢复,那么 quartz 调度程序表达式将得到下一个有效时间是根据提供的开始时间计算的,因此调度程序作业是过时的作业..

实时示例:

任务设置为每 10 分钟使用以下 cron 表达式进行间隔。

0 0/10 * 1/1 * ? *

作业的开始时间是

"2017-04-08 21:46:00"

但 application/tomcat 服务器仅在 4 月 10 日启动,在执行调度程序后,启动时间更改为以下格式

"2017-04-08 21:56:00"

只是时间增加到10分钟,日期没有改成4月10日(今天)。

目前我正在使用下面的代码为调度程序获取下一个date/time

    CronExpression exp = new CronExpression(schedulerConfig.getCronexpression());

  NextschedulerDate = exp.getNextValidTimeAfter(Currentstartdate);

同样的情况不适用于工作日选项。请协助

循环调用 getNextValidTimeAfter 直到 NextScheduledDate 是未来的时间。

如果Currentstartdate"2017-04-08 21:46:00"CronExpression exp"0 0/10 * 1/1 * ? *",那么NextschedulerDate当然是"2017-04-08 21:56:00"。这是正确的,因为那是满足 cron 表达式的第一个有效日期 在您提供的日期 .

之后

如果您想知道给定 cron 表达式的当前日期 之后的第一个有效日期 ,您可以执行 NextschedulerDate = exp.getNextValidTimeAfter(new Date());.

但所有的困惑都来自使用 startDate。那是作业计划到 运行 的日期,而不是实际 运行 的日期。 您可能打算使用 getFireTime(对于 运行ning 作业)、getNextFireTimegetPreviousFireTime(任何作业)来获取实际执行日期。