目前我在我的应用程序中使用quartz调度程序来执行调度程序。我的应用程序正在 tomcat 服务器上运行。如果服务器已启动,则调度程序将根据提供的开始时间开始触发任务。
我的问题是,如果任务被安排为每 10 分钟间隔执行一次,并且 tomcat 由于某些原因而停止,并且在大约两天后恢复,那么获取下一个有效时间的quartz调度程序表达式所花费的时间是基于在提供的开始时间上,因此调度程序作业是回溯作业的日期..
实时示例:
任务设置为每 10 分钟使用以下 cron 表达式间隔一次。
0 0/10 * 1/1 * ? *
作业的开始时间是
“2017-04-08 21:46:00”
但是应用程序/tomcat服务器仅在4月10日启动,并且在执行调度程序后,启动时间更改为以下格式
“2017-04-08 21:56:00”
只是时间增加到了 10 分钟,日期没有更改为 4 月 10 日(今天)。
目前我正在使用下面的代码来获取调度程序的下一个日期/时间
CronExpression exp = new CronExpression(schedulerConfig.getCronexpression());
NextschedulerDate = exp.getNextValidTimeAfter(Currentstartdate);
同样的情况不适用于工作日选项。请帮忙
最佳答案
如果 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
(对于正在运行的作业)、getNextFireTime
和 getPreviousFireTime
(任何作业)来获取实际执行日期.
关于web-applications - 如果应用程序停止, quartz 调度程序将获取下一个调度程序时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43319885/