JAVA:即使排定了时间表,也要执行cron作业任务

我已经检查了here,但似乎没有给出解决方案。

这是我的问题。

我的 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;
}

任何帮助将不胜感激。谢谢!

h12405asdf 回答:JAVA:即使排定了时间表,也要执行cron作业任务

使用Spring批处理Tasklet来实现这一目标。原因是,Spring提供了实现上次作业运行次数/定时的方法,并从此开始选择下一个块。

用这种方法会容易得多。

在此链接上可以找到一些示例。 https://www.mkyong.com/spring-batch/spring-batch-tasklet-example/

您可能会去使用基于批注的spring批处理(如果不满意基于xml的话)

,

可以通过倒退开始日期[<PHAsset: 0x10a0571e0> 1CF2E42E-5B67-4152-A46B-DF2DB36102AC/L0/001 mediaType=1/1,sourceType=1,(11328x3808),creationDate=2019-12-09 09:24:54 +0000,location=0,hidden=0,favorite=0,<PHAsset: 0x1087d5a80> 992BCCD7-D048-40EB-AA9C-3A337A303F1F/L0/001 mediaType=1/1,(10612x2356),creationDate=2019-12-09 09:23:24 +0000,<PHAsset: 0x108747ff0> C63EBB45-C9E9-4B8F-AD7B-71BB3745C70F/L0/001 mediaType=1/0,(4096x2048),creationDate=2019-04-08 06:16:29 +0000,favorite=0 ] 来实现。由于我在凌晨3点制定了CRON计划,因此可以说该应用程序是在凌晨4点部署的。通过将@Expiration的Date设置为可以捕获3AM的日期。它会立即运行该过程。但是下一个时间表将恰好是凌晨3点。

@Expiration
本文链接:https://www.f2er.com/2981008.html

大家都在问