Web applications 石英调度器在应用程序停止时获取下一个调度器时间

Web applications 石英调度器在应用程序停止时获取下一个调度器时间,web-applications,cron,tomcat7,quartz-scheduler,scheduler,Web Applications,Cron,Tomcat7,Quartz Scheduler,Scheduler,目前,我正在应用程序中使用quartz调度程序来执行调度程序。我的应用程序正在tomcat服务器上运行。如果服务器已启动,则计划程序将根据提供的启动时间启动任务 我的问题是,如果任务被安排每隔10分钟执行一次,并且tomcat由于某些原因被停止,并且在大约两天后恢复,那么获取nextvalid时间的quartz调度程序表达式将根据提供的开始时间执行,因此调度程序作业是过期作业 实时示例: 任务设置为每隔10分钟使用下面的cron表达式进行间隔 0 0/10*1/1** 这项工作的开始时间是 “2

目前,我正在应用程序中使用quartz调度程序来执行调度程序。我的应用程序正在tomcat服务器上运行。如果服务器已启动,则计划程序将根据提供的启动时间启动任务

我的问题是,如果任务被安排每隔10分钟执行一次,并且tomcat由于某些原因被停止,并且在大约两天后恢复,那么获取nextvalid时间的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日(今天)

目前,我正在使用下面的代码为调度程序获取下一个日期/时间

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

  NextschedulerDate = exp.getNextValidTimeAfter(Currentstartdate);

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

在循环中调用getNextValidTimeAfter,直到下一个计划日期在未来。

如果
当前开始日期
“2017-04-08 21:46:00”
并且
CronExpression是
“0/10*1/1*?*”
,那么
下一个计划日期
当然是
“2017-04-08 21:56:00”
。这是正确的,因为这是在您提供的日期之后满足cron表达式的第一个有效日期

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


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

您对CronTrigger的缺火指令是什么?如果你现在用失火指令,你可以试着用失火指令,什么都不做。是的,约翰,也这么做了。谢谢您的回复。@KarthickSambanghi很高兴我能帮助您。如果是这样,记得接受答案,谢谢!