gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:24:33 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com