我在 Spring Boot 中有一个调度程序,它每 X 分钟完成一项特定的业务任务。它工作正常,直到它突然停止并且不再起作用。无论是日志还是其他日志都没有异常。我需要重新启动程序才能让调度程序再次工作。
有时候调度器的任务出错了,我就抛出异常。为了能够专门处理这些异常,我在 Spring 中为调度程序编写了一个自定义 ErrorHandler,用于解决用于日志记录的单独任务。它正确链接到调度程序并处理任务。
最佳答案
当 ErrorHandler 内部抛出未处理的异常时,可能会出现此问题。我不确定具体细节,但是由 ErrorHandler (或其内部的方法)抛出的运行时异常在其外部传播基本上会杀死该任务的预定线程。此外,没有任何内容被写入日志(没有异常消息,nada)。
解决此问题的“最简单”方法是将整个方法包装在捕获异常的 try/catch block 中 - 尽管取决于为什么你有错误处理程序,这可能是一个坏主意。这并不能解决当前的根本问题,但它可以使线程保持 Activity 状态并允许您记录问题。
示例:
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.
}
}
关于java - Spring Boot 调度程序线程随机停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60615460/