我在java应用程序中使用石英cron触发器。是否可以在执行时间之前手动触发 cron 触发器,并跳过下一次执行?
示例:每天早上 6 点执行一个 cron 触发器。但是今天我想在早上 5 点执行该触发器,但明天早上 6 点继续执行(即跳过今天的执行(。
这可能吗?我用 triggerJob 尝试过,但它现在执行 cron 作业并在其原始触发器处再次触发它。
石英不支持开箱即用,但您可以使用几个自定义标志来实现它。在手动触发作业的类中,您可以将
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();
}
这将在手动触发时执行作业,并在下一次(计划的(作业执行中不执行任何操作。