目前我在我的应用程序中使用quartz scheduler来执行调度程序。我的应用程序在tomcat服务器上运行。如果服务器已启动,则调度程序将根据提供的开始时间开始触发任务。
我的问题是,如果任务被安排在每10分钟以间隔为基础执行并且tomcat由于某些原因而停止,并且在两天之后它被恢复,那么石英调度程序表达式获得下一个有效时间是基于在提供的开始时间,因此调度程序工作是过时的工作..
实时示例:
将任务设置为间隔,每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);
同一案例不适用于工作日选项。请帮助
答案 0 :(得分:1)
在循环中调用getNextValidTimeAfter,直到将来有NextScheduledDate。
答案 1 :(得分:1)
如果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
(任何作业)来获取实际执行日期。