Java Spring启动计划程序线程随机停止

Java Spring启动计划程序线程随机停止,java,spring,spring-boot,error-handling,scheduler,Java,Spring,Spring Boot,Error Handling,Scheduler,我在SpringBoot中有一个调度器,它每X分钟完成一个特定的业务任务。它工作正常,直到它突然停止,不再啮合。日志或任何其他日志中没有异常。我需要重新启动程序以使调度程序再次工作 有时调度程序的任务出错,我抛出一个异常。为了能够具体地处理这些异常,我在Spring中为调度器编写了一个定制的ErrorHandler,用于解析用于日志记录的单独任务。它正确链接到计划程序并处理任务。当在ErrorHandler中抛出未处理的异常时,可能会出现此问题。我不确定具体细节,但是由ErrorHandler(

我在SpringBoot中有一个调度器,它每X分钟完成一个特定的业务任务。它工作正常,直到它突然停止,不再啮合。日志或任何其他日志中没有异常。我需要重新启动程序以使调度程序再次工作


有时调度程序的任务出错,我抛出一个异常。为了能够具体地处理这些异常,我在Spring中为调度器编写了一个定制的ErrorHandler,用于解析用于日志记录的单独任务。它正确链接到计划程序并处理任务。

当在ErrorHandler中抛出未处理的异常时,可能会出现此问题。我不确定具体细节,但是由ErrorHandler(或其中的方法)引发的运行时异常在其外部传播,基本上会杀死该任务的调度线程。此外,没有任何内容写入日志(无异常消息,nada)

解决这一问题的“最简单”方法是将整个方法包装在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. 
        }
    }

handleError
的javadoc确实说“处理给定的错误,可能会将其作为致命的异常重新引用”,但它没有给出有关后果的信息。界面没有很好的文档记录。。。