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