在写定时任务的时候, 捕获了 方法的 异常,然后抛出去
} catch (Exception e) {
logger.error("定时任务>>更新直接上级出问题>>>执行任务出错了..."+e);
JobExecutionException jobe = new JobExecutionException(e);
jobe.setRefireImmediately(true);
throw jobe;
}
看起来没有问题,测试的时候,发现 当出现了一个 小小的SQL异常的时候,比如 多一个 引号 '
结果发现它是捕获了,但是不知道抛去哪里了, 定时任务不没有结束,反而 重新 继续 执行了,一直循环 执行下去, 被吓到了。 目前还不知道是什么原因。如果是 空指针异常啊,什么的 又没有出现这样的异常,方法就直接结束了,很奇怪。估计是和 框架 架构有关吧,总之为了防止坑,还是 结束方法执行吧,简单暴力。 为了反正出现死异常循环,因此 捕获异常的时候, 就结束方法执行。
} catch (Exception e) {
logger.error("定时任务>>更新直接上级出问题>>>执行任务出错了..."+e);
return;
}
百度了一些 找到原因的 了
问题1 如果你的任务执行发生错误了怎么办呀!
Quartz提供了二种解决方法
1 立即重新执行任务
2 立即停止所有相关这个任务的触发器
问题2 怎么去执行呢
Quartz的解决方式是
在你的程序出错时,用Quartz提供的JobExecutionException类相关方法很好的解决
1 立即重新执行任务
Java代码 收藏代码
try {
int zero = 0;
@SuppressWarnings("unused")
int calculation = 4815 / zero;
} catch (Exception e) {
_log.error("执行任务出错了...");
JobExecutionException e2 =
new JobExecutionException(e);
// this job will refire immediately
e2.setRefireImmediately(true);
throw e2;
}
2 立即停止所有相关这个任务的触发器
try {
int zero = 0;
@SuppressWarnings("unused")
int calculation = 4815 / zero;
} catch (Exception e) {
_log.info("--- Error in job!");
JobExecutionException e2 =
new JobExecutionException(e);
// Quartz will automatically unschedule
// all triggers associated with this job
// so that it does not run again
e2.setUnscheduleAllTriggers(true);
throw e2;
}