JAVA:运行cron作业任务,即使计划已经到来
我已经检查过了,但似乎没有给出解决方案 这是我的问题 我在seam项目中有一个cron作业,它是用JBossAsync编写的。它每天凌晨3点开 然而,昨晚,应用程序需要在此之前重新启动。应用程序启动时已过凌晨3点 任务设置为每凌晨3点运行一次,但未运行。在代码中,最终过期时间设置为12/31/9999。从技术上讲,这将假定它已经完成 由于该作业在该时间从未运行,因此即使超过预定时间,是否仍有机会运行该作业?比如在应用程序准备好生产后立即执行它。如果有解决方案,我将如何解决 放置一些标志来检查作业是否完成是最不可取的选择 这是我的示例代码JAVA:运行cron作业任务,即使计划已经到来,java,asynchronous,jboss,cron,quartz-scheduler,Java,Asynchronous,Jboss,Cron,Quartz Scheduler,我已经检查过了,但似乎没有给出解决方案 这是我的问题 我在seam项目中有一个cron作业,它是用JBossAsync编写的。它每天凌晨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;
}
任何帮助都将不胜感激。谢谢 使用Spring批处理tasklet来实现这一点。。原因是,spring提供了实现上一个作业运行次数/时间的方法,并从那时起选择下一个块 这样做要容易得多 您可以在此链接中找到一些示例。
您可能会选择基于注释的spring批处理(如果对基于xml的批处理不满意的话)可以回溯开始日期,即
@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());
}
您正在使用哪个版本的JBoss AS或JBoss EAP?@JamesR.Perkins规范版本:4.2.3.GAHi。我道歉。我忘了注意到这个项目是seam项目。我已经更新了描述。谢谢你的回答。