【发布时间】:2018-02-12 22:18:10
【问题描述】:
我们有一个要求,如果作业面临 Java 异常,我们需要重新启动 Quartz 作业,最多 5 次。
但是当我们尝试从主异常中调用这些方法中的任何一个时
JobExecutionException je;
je.refireImmediately();
je.setRefireImmediately(true);
不会重新触发。
使用的Quartz版本是1.7.3
请帮忙。
【问题讨论】:
我们有一个要求,如果作业面临 Java 异常,我们需要重新启动 Quartz 作业,最多 5 次。
但是当我们尝试从主异常中调用这些方法中的任何一个时
JobExecutionException je;
je.refireImmediately();
je.setRefireImmediately(true);
不会重新触发。
使用的Quartz版本是1.7.3
请帮忙。
【问题讨论】:
你很接近,但你需要重新抛出你新创建的异常。此代码在 2.1.6 中有效,但在 1.X 中,您可能需要在 JobDataMap 中手动增加/存储重新触发计数。
try {
whatever();
} catch (Exception e) {
// Retry this job up to 5 times.
if (context.getRefireCount() < 4) {
logger.warn("job_failure attempt={}", context.getRefireCount());
throw new JobExecutionException(e, true);
} else {
throw e;
}
}
【讨论】: