【问题标题】:Quartz scheduled job not firing - possible unhandled exception?石英计划作业未触发 - 可能未处理的异常?
【发布时间】:2011-10-18 08:09:46
【问题描述】:

我有一个使用 Quartz 库的带有计划作业的 Web 应用程序。最近我遇到了一些工作看起来不像被解雇的情况。我做了一些阅读,显然 如果作业引发异常,Quartz 调度程序将尝试再次执行该作业。这是真的吗?

在任何情况下,我都基于上述陈述正确的假设进行了一些故障排除。所以假设我有以下代码sn-p:

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 {

这里发生了什么?

【问题讨论】:

    标签: java exception quartz-scheduler scheduler


    【解决方案1】:

    从 Job 抛出的任何 Throwable 都将被 Quartz 捕获并包装在 JobExecutionException 中,并且不会重新触发。 查看JobRunShell#run的源代码

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

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

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

    【讨论】:

      猜你喜欢
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 2019-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多