Quartz异常处理

问题描述 投票:3回答:1

我有以下石英工作。我用它做了一些测试。

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

但我无法完全理解setUnscheduleAllTriggerssetUnscheduleFiringTrigger之间的区别。不幸的是,没有Javadoc。

有人可以帮助我吗?

谢谢

java exception quartz-scheduler
1个回答
7
投票

在石英中,你可以有多个触发器解雇你的工作。如果作业执行失败的原因是触发器中固有的,您可能希望取消计划该特定触发器。这是我对setUnscheduleFiringTrigger(true)的理解。

如果问题在于作业本身而不是触发器,那么无论是谁或是什么启动它,它都会在每次执行时失败。因此,为了避免多次执行失败的麻烦,只是因为不同的触发器触发了作业,您可以使用setUnscheduleAllTriggers(true)来取消调度触发此作业的所有触发器,从而防止任何进一步执行错误的作业。

总结一下

  • setUnscheduleFiringTrigger =>停止调用此特定作业运行的触发器
  • setUnscheduleAllTriggers =>停止调用此作业的所有触发器

有关Exception用法的示例,请参阅http://www.quartz-scheduler.org/documentation/2.4.0-SNAPSHOT/examples/Example6.html

© www.soinside.com 2019 - 2024. All rights reserved.