java - Quartz 预定作业未触发 - 可能未处理的异常?

标签 java exception quartz-scheduler scheduler

我有一个 Web 应用程序,其中包含使用 Quartz 库的计划作业。最近我遇到了一些工作看起来不像被解雇的情况。我做了一些阅读,显然 如果作业抛出异常,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 {

这里发生了什么?

最佳答案

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

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

A Job's execute method should contain a try-catch block that handles all possible exceptions.

If a job throws an exception, Quartz will typically immediately re-execute it (and it will likely throw the same exception again). It's better if the job catches all exception it may encounter, handle them, and reschedule itself, or other jobs. to work around the issue.

关于java - Quartz 预定作业未触发 - 可能未处理的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7804218/

相关文章:

java - API < 21 的 Android 复选框按钮样式

java - 字符显示/搜索 Unicode 字符

java - 有没有办法处理Java堆空间异常

java - quartz 和 Spring : dynamic scheduling

java - 如何动态配置Quartz DataSource URL?

java - Java 中 float 的值在赋值时发生变化

java - Java 运算符优先级到底是如何工作的?

java - 删除 arraylist 异常中的最后一个元素

perl - 在 Perl 的 ssh 连接中捕获错误主机名的错误消息(使用 Net::OpenSSH)

java - 在运行时创建 Quartz Scheduler 实例