Quartz:执行cron触发器,跳过下一次执行

时间:2018-03-13 11:01:03

标签: java cron quartz-scheduler quartz

我在java应用程序中使用quartz cron触发器。是否可以在执行时间之前手动触发cron触发器,并跳过下一次执行?

示例:每天早上6点执行一次cron触发器。但今天我想在早上5点执行该触发器,但明天早上6点继续执行(即跳过今天的执行)。

这可能吗?我尝试使用 triggerJob ,但是现在执行cron作业并在其原始触发器处再次触发它。

1 个答案:

答案 0 :(得分:0)

石英不支持开箱即用,但您可以使用几个自定义标志来实现它。在手动触发作业的类中,您可以放置​​

JobDataMap jobDataMap = new JobDataMap();
jobDataMap.put("manualExecution", true);

scheduledEventRuleJobScheduler.triggerJob(JobKey.jobKey("myJob"), jobDataMap);

你的工作班看起来像这样

@PersistJobDataAfterExecution
public class MyJob implements Job {

  @Override
  public void execute(JobExecutionContext context) throws JobExecutionException {
    JobDataMap mergedJobDataMap = context.getMergedJobDataMap();
    if (mergedJobDataMap.getBoolean("skipNextExecution")) {
      context.getJobDetail().getJobDataMap().remove("skipNextExecution");
      return;
    }
    if (mergedJobDataMap.getBoolean("manualExecution")) {
      context.getJobDetail().getJobDataMap().put("skipNextExecution", true);
    }
    doYourStuffHere();
  }

这将在手动触发时执行作业,在下一个(计划的)作业执行中不执行任何操作。