【问题标题】:Spring Boot scheduler thread stops randomlySpring Boot 调度程序线程随机停止
【发布时间】:2020-06-22 05:20:54
【问题描述】:

我在 Spring Boot 中有一个调度程序,它每 X 分钟完成一项特定的业务任务。它工作正常,直到它突然停止并且不再参与。日志或任何其他日志中没有异常。我需要重新启动程序才能让调度程序再次工作。

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

【问题讨论】:

    标签: java spring spring-boot error-handling scheduler


    【解决方案1】:

    当在 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 确实说“处理给定的错误,可能将其作为致命异常重新抛出。”,但它没有提供有关后果的信息。界面没有很好的记录...
    猜你喜欢
    • 2015-01-25
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2012-01-14
    • 1970-01-01
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多