我有以下石英工作.我用它做了一些测试.
public void execute(JobExecutionContext context) throws JobExecutionException {
try {
Object result = callable.call();
} catch (Exception e) {
JobExecutionException e2 = new JobExecutionException(e);
if (REFIRE_IMMEDIATELY.equals(policy)) {
e2.setRefireImmediately(true);
} else if (UNSCHEDULE_ALL_TRIGGERS.equals(policy)) {
e2.setUnscheduleAllTriggers(true);
} else {
e2.setUnscheduleFiringTrigger(true);
}
throw e2;
}
}
但我无法完全理解setUnscheduleAllTriggers和setUnscheduleFiringTrigger之间的区别.不幸的是,没有Javadoc.
有人可以帮助我吗?
谢谢
解决方法:
在石英中,你可以有多个触发器解雇你的工作.如果作业执行失败的原因是触发器中固有的,您可能希望取消计划该特定触发器.这是我对setUnscheduleFiringTrigger(true)的理解.
如果问题在于作业本身而不是触发器,那么无论是谁或是什么启动它,它都会在每次执行时失败.因此,为了避免多次执行失败的麻烦,只是因为不同的触发器触发了作业,您可以使用setUnscheduleAllTriggers(true)来取消调度触发此作业的所有触发器,从而防止任何进一步执行错误的作业.
总结一下
> setUnscheduleFiringTrigger =>停止调用此特定作业运行的触发器
> setUnscheduleAllTriggers =>停止调用此作业的所有触发器
标签:java,exception,quartz-scheduler
来源: https://codeday.me/bug/20190825/1717331.html