Quartz预定的工作没有解雇 - 可能是未处理的异常?

时间:2011-10-18 08:09:46

标签: java exception quartz-scheduler scheduler

我有一个使用Quartz库的预定作业的Web应用程序。最近我遇到的情况是工作似乎没有被解雇。我做了一些阅读,显然如果作业抛出异常,Quartz调度程序将尝试再次执行作业。这是真的吗?

无论如何,我根据上述陈述为真的假设做了一些故障排除。所以我要说我有以下代码片段:

try {
   method.invoke(object, params);
}
catch (ExceptionA ea) {
   ea.printStackTrace();
}
catch (ExceptionB eb) {
   eb.printStackTrace();
}
// and so on so forth, catching a bunch of specific Exceptions

需要注意的重点是异常本身未被捕获

因此,假设被调用的方法抛出了一个未处理的异常。

public void methodBeingInvoked() throws UnhandledException {

这里发生了什么?

1 个答案:

答案 0 :(得分:4)

从作业中抛出的任何 Throwable 将被Quartz捕获并包含在JobExecutionException中,并且不会被激活。 请参阅JobRunShell#run

的源代码

有一些documentation on the Quartz website与此相矛盾,但在查看Quartz 1.8.x / 2.0.x / 2.1.x源代码之后,所有版本的文档都是错误的。

  

Job的execute方法应该包含一个处理的try-catch块   所有可能的例外。

     

如果作业抛出异常,Quartz通常会立即生效   重新执行它(它可能会再次抛出相同的异常)。   如果作业捕获它可能遇到的所有异常,处理,那就更好了   他们,并重新安排自己,或其他工作。解决这个问题。