首页 文章

如果应用程序停止,quartz scheduler会获得下一个调度程序时间

提问于
浏览
1

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

我的问题是,如果任务被安排以间隔为基础每隔10分钟执行一次,并且tomcat由于某些原因而停止,并且在两天之后恢复它,然后石英调度程序表达式获得下一个有效时间基于开始提供的时间,因此调度工作是回到过时的工作..

Real time example :

任务设置为间隔,每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);

同一案例不适用于工作日选项 . 请帮助

2 回答

  • 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 . 这是作业计划运行的日期,而不是实际运行的日期 . You probably mean to use getFireTime (for a running job), getNextFireTime and getPreviousFireTime (any job) to get the actual execution date.

  • 1

    在循环中调用getNextValidTimeAfter,直到NextScheduledDate将来 .

相关问题