Кварц по расписанию не стреляет - возможно необработанное исключение? - PullRequest
3 голосов
/ 18 октября 2011

У меня есть веб-приложение с запланированными заданиями, использующее библиотеку 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 {

Что здесь происходит?

1 Ответ

4 голосов
/ 14 ноября 2011

Любое Throwable , выброшенное из задания, будет перехвачено Quartz и помещено в исключение JobExecutionException, а не обновлено. См. Исходный код для JobRunShell # run

Существует некоторая документация на веб-сайте Quartz , которая противоречит этому, но после просмотра исходного кода Quartz 1.8.x / 2.0.x / 2.1.x документация неверна для всех версий.

Метод execute задания должен содержать блок try-catch, который обрабатывает все возможные исключения.

Если задание выдает исключение, Quartz обычно сразу повторите его (и он, скорее всего, снова выдаст то же исключение). Лучше, если задание отловит все исключения, с которыми оно может столкнуться, обработайте их и перенести на себя, или на другую работу. чтобы обойти проблему.

...