Quartz 计划作业未触发 - 可能存在未处理的异常?

发布于 2024-12-10 05:39:16 字数 579 浏览 1 评论 0原文

我有一个使用 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 {

这里会发生什么?

I have a web application with scheduled jobs using the Quartz library. Recently I encountered cases where a job didn't seem like it was being fired. I did some reading and apparently if the job throws an exception, the Quartz scheduler will attempt to execute the job again. Is this true?

In any case, I did some troubleshooting based on the assumption that the above statement is true. So let's say I have the following code snippet:

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

The important point here to note is that Exception itself is not being caught.

So let's say the method being invoked throws an exception which is not handled.

public void methodBeingInvoked() throws UnhandledException {

What happens here?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

执着的年纪 2024-12-17 05:39:16

任何从 Job 抛出的 Throwable 都会被 Quartz 捕获并包装在 JobExecutionException 中,并且不会重新触发。
请参阅 JobRunShell#run

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

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

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

Any Throwable thrown from a Job will be caught by Quartz and wrapped in a JobExecutionException, and not refired.
See the source code for JobRunShell#run

There is some documentation on the Quartz website which contradicts this, but after looking at Quartz 1.8.x/2.0.x/2.1.x source code, the documentation is wrong for all versions.

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文