web-applications - 如果应用程序停止, quartz 调度程序将获取下一个调度程序时间

标签 web-applications cron tomcat7 quartz-scheduler scheduler

目前我在我的应用程序中使用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 (对于正在运行的作业)、getNextFireTimegetPreviousFireTime (任何作业)来获取实际执行日期.

关于web-applications - 如果应用程序停止, quartz 调度程序将获取下一个调度程序时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43319885/

相关文章:

java - CORS - 起源 http ://localhost is not allowed by Access-Control-Allow-Origin. 错误。

tomcat - 将多个 lib 目录添加到我的 java WebApp

web-applications - Chromeless Chrome 网络应用程序

ruby-on-rails - Rails 迁移如何强制关系?

linux - "Service cron status"命令不返回 ubuntu docker 容器中 cron 的状态

java - 如何为简单的 Maven 应用程序配置 slf4j 以正确显示日志?

java - 数据库连接工厂 : error getting dbconnection jdbc/dotCMSPool

php - 在 Ubuntu 18.04 crontab 中执行 PHP

mysql - 我如何使用 crontab 每天自动恢复 MySQL 数据库?

java - Tomcat7卡塔琳娜错误