java - JAVA:运行 cron 作业任务,即使计划已经到来
问题描述
我已经在这里检查过,但似乎没有给出解决方案。
这是我的问题。
我的seam 项目中有一个 cron 工作,它是用 jboss async 编写的。它每天凌晨 3 点运行。
但是昨晚,该应用程序需要在此之前重新启动。申请开始时已过了凌晨 3 点。
任务设置为每凌晨 3 点运行,但没有运行。在代码中,最终到期时间设置为 12/31/9999。从技术上讲,这将假定它已经完成。
由于当时从未运行过,是否有机会在预定时间过去后仍然运行该作业?就像在应用程序准备好生产后立即执行它一样。如果有解决方案,我将如何解决?
放置一些标志来检查工作是否完成将是最少的选择。
这是我的示例代码。
public void someMethodToSetJob() {
final String cronTabSchedule = "0 0 3 ? * MON-FRI *";
final Calendar cal = Calendar.getInstance();
cal.add(Calendar.MINUTE, 1);
cal.set(Calendar.SECOND, 0);
final Calendar expiry = Calendar.getInstance();
expiry.set(Calendar.MONTH, 11);
expiry.set(Calendar.DATE, 31);
expiry.set(Calendar.YEAR, 9999);
expiry.set(Calendar.SECOND, 0);
processBackgroundProcessCheck(cal.getTime(), cronTabSchedule, expiry.getTime());
}
@Asynchronous
@Transactional(TransactionPropagationType.REQUIRED)
public QuartzTriggerHandle processBackgroundProcessCheck(
@Expiration final Date when,
@IntervalCron final String cron,
@FinalExpiration final Date endDate) {
...
return null;
}
任何帮助将不胜感激。谢谢!
解决方案
可以通过回溯开始日期(即@Expiration
. 由于我在凌晨 3 点有 CRON 计划,因此假设应用程序在凌晨 4 点部署。通过将@Expiration 的日期设置为可以赶上凌晨 3 点的日期。它将立即运行该过程。但下一个时间表将是凌晨 3 点。
public void someMethodToSetJob() {
final String cronTabSchedule = "0 0 3 ? * MON-FRI *";
final Calendar cal = Calendar.getInstance();
cal.add(Calendar.HOUR_OF_DAY, 3);
cal.set(Calendar.SECOND, 0);
final Calendar expiry = Calendar.getInstance();
expiry.set(Calendar.MONTH, 11);
expiry.set(Calendar.DATE, 31);
expiry.set(Calendar.YEAR, 9999);
expiry.set(Calendar.SECOND, 0);
processBackgroundProcessCheck(cal.getTime(), cronTabSchedule, expiry.getTime());
}
推荐阅读
- c++ - 关于 C++ 中双变量的精度
- javascript - WEBRTC 防火墙规则问题
- python - 熊猫的移动平均线,第一行和最后一行的问题
- r - R - 你如何引用集合对象的边界?
- database - 未定义变量:数据(查看:C:\xampp\htdocs\Aarogyam\resources\views\Home.blade.php)
- css - 如何在使用 CSS 保持自由浮动的同时垂直均匀分布元素
- sql - SQL Azure - 查找列上的所有依赖项?
- python - 为什么python3中的循环索引递减不起作用?
- c++ - 简单 C++ 控制台应用程序上的命令行参数
- java - Arraylist 比较失败