Quartz在@DisallowConcurrentExecution的情况下,如果正在执行相同的作业(JobA)实例,则为作业(JobA)设置。但我想取消那份工作,而不是将其排队等待执行
答案 0 :(得分:0)
我有一个使用TriggerListeners的解决方案,但是使用此解决方案,您无法触发多个作业
class CustomTriggerListener extends TriggerListenerSupport {
private JobExecutionContext lastJobExecutionContext;
@Override
public boolean vetoJobExecution(Trigger trigger, JobExecutionContext context) {
boolean vetoExecution = false;
if (lastJobExecutionContext == null) {
lastJobExecutionContext = context;
} else {
boolean lastJobIsDone = lastJobExecutionContext.getJobRunTime() >= 0;
if (lastJobIsDone) {
lastJobExecutionContext = context;
} else {
vetoExecution = true;
}
}
return vetoExecution;
}
@Override
public String getName() {
return "CustomTriggerListener";
}
}
答案 1 :(得分:0)
for (int i = 0; i < scheduler.getCurrentlyExecutingJobs().size(); i++) {
if(scheduler.getCurrentlyExecutingJobs().get(i).
getJobDetail().getKey().getName().equals(jobName)) {
scheduler.interrupt(new JobKey(jobName, "group1"));
}
}