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

标签 java spring spring-boot error-handling scheduler

我在 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/

相关文章:

java - HashSet包含对象时无论内容是否改变都返回true

java - 我想永久保留 Textfield 中 Textarea 的值(Java GUI)

java - 如何从列表 <String> 中删除换行符

java - 设置蒲公英数据表中的可见行数

java - 事务注释在 Spring Boot 中不起作用

java - Spring JPA 中的 'default' 类型的分页和排序存储库是什么?

java - IntelliJ 12.1 社区 : Structural Search . .. 不存在?

java - spring中通过@propertysource注解加载属性文件和使用PropertySourcesHolderConfigure bean加载属性文件有什么区别

java - Spring boot starter web - 创建一个配置 bean 来改变首先初始化的属性

java - Spring消息TTL不起作用