【问题标题】:Quartz: Execute cron trigger, skip next executionQuartz:执行cron触发器,跳过下一次执行
【发布时间】:2018-08-21 14:37:00
【问题描述】:

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

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

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

【问题讨论】:

    标签: java cron quartz-scheduler quartz


    【解决方案1】:

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

    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();
      }
    

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

    【讨论】:

    • 在 C# 实现中,您可以注册一个 ITriggerListener (IScheduler.ListenerManager),然后可以否决作业执行。我猜 Java 也一样?
    猜你喜欢
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多