Spring Boot调度程序线程随机停止

问题描述 投票:1回答:1

我在Spring Boot中有一个Scheduler,它每X分钟执行一次特定的业务任务。它可以正常工作,直到它突然停止并且不再啮合。日志或任何其他日志中都没有例外。我需要重新启动程序才能使调度程序再次工作。

有时调度程序的任务出错,并且抛出异常。为了能够专门处理这些异常,我在Spring中为调度程序编写了一个自定义ErrorHandler,它解决了用于日志记录的单独任务。它已正确链接到调度程序并处理任务。

java spring spring-boot error-handling scheduler
1个回答
1
投票

当未处理的异常抛出到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. 
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.