Поток планировщика Spring Boot останавливается случайным образом - PullRequest
1 голос
/ 10 марта 2020

У меня есть планировщик при весенней загрузке, который выполняет заданную c бизнес-задачу каждые X минут. Работает нормально, пока не остановится и больше не включается. Нет никаких исключений в журналах или любых других журналах. Мне нужно перезапустить программу, чтобы планировщик снова заработал.

Иногда задача планировщика идет не так, и я выкидываю исключение. Чтобы иметь возможность обрабатывать эти исключения конкретно, я написал собственный ErrorHandler в Spring для планировщика, который решает отдельную задачу для целей ведения журнала. Он правильно связан с планировщиком и обрабатывает задачу.

1 Ответ

1 голос
/ 10 марта 2020

Эта проблема может возникать, когда необработанное исключение возникает в ErrorHandler. Я не уверен насчет специфики, однако исключение времени выполнения, выдаваемое ErrorHandler (или методом внутри него), которое распространяется вне его, в основном убивает запланированный поток для этой задачи. Кроме того, НИЧЕГО не записывается в журналы (нет сообщений об исключениях, нада).

Самый простой способ решить эту проблему - обернуть весь метод в блок try / catch, перехватывающий исключение - хотя в зависимости от почему у вас есть такой обработчик ошибок, который может быть плохая идея. Это не решает основной проблемы под рукой, но поддерживает поток живой и позволяет регистрировать проблему.

Пример:

public class MyErrorHandler implements ErrorHandler {

    @Override
    public void handleError(Throwable t) {
        try {
            //handle intended exception (ex. write to database or logs)
        } catch (Exception e) {
            //handle exception that was thrown while trying to handle the intended exception. 
        }
    }
...