我在Spring Boot中有一个Scheduler,它每X分钟执行一次特定的业务任务。它可以正常工作,直到它突然停止并且不再啮合。日志或任何其他日志中都没有例外。我需要重新启动程序才能使调度程序再次工作。
有时调度程序的任务出错,并且抛出异常。为了能够专门处理这些异常,我在Spring中为调度程序编写了一个自定义ErrorHandler,它解决了用于日志记录的单独任务。它已正确链接到调度程序并处理任务。
当未处理的异常抛出到ErrorHandler中时,可能会出现此问题。我不确定具体细节,但是由ErrorHandler(或其内部方法)引发的运行时异常传播到其外部,基本上会杀死该任务的计划线程。此外,NOTHING会写入日志(无异常消息,nada)。
解决此问题的“最简单”方法是将整个方法包装在try / catch块中以捕获Exception-尽管根据why可能有一个错误处理程序,但这可能不是一个好主意。这不能解决当前的基本问题,但是可以使线程保持活动状态,并允许您记录问题。
示例:
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.
}
}