当前位置: 首页 > 知识库问答 >
问题:

Spring Boot scheduler线程随机停止

东方宜
2023-03-14

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

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

共有1个答案

公西俊能
2023-03-14

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

解决这一问题的“最简单”方法是将整个方法包装在一个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. 
        }
    }
 类似资料:
  • 问题内容: 在多个线程之间共享该类的一个实例是否有效?并特别从多个线程调用? 问题答案: 从某种意义上讲,它是线程安全的,当被多个线程使用时仍会生成随机数。 Sun / Oracle JVM实现使用同步和AtomicLong作为种子来提高线程之间的一致性。但是,文档中似乎并没有在所有平台上对此进行担保。 我不会编写要求这种保证的程序,尤其是当您无法确定调用顺序时。

  • 我已经在kuberenetes中使用散列分片设置了分片的MongoDB集群。我首先创建了配置服务器副本集,然后创建了2个分片副本集。最终创建了mongos来连接分片集群。 我按照下面的链接设置分片MongoDB点击https://docs . MongoDB . com/manual/tutorial/deploy-sharded-cluster-hashed-sharding/ 在创建mongo

  • 我有一个 Spark 流式处理作业,它读取 Cosmos 更改源数据,如下所示,在具有 DBR 8.2 的数据砖集群中运行。 虽然作业正常工作,但偶尔,流会突然停止,并且在log4j输出中出现以下循环。重新启动作业将处理“待办事项”中的所有数据。以前有人经历过这样的事情吗?我不确定是什么原因造成的。有什么想法吗?

  • 条件随机场(Conditional Random Fields, 以下简称CRF)是给定一组输入序列条件下另一组输出序列的条件概率分布模型,在自然语言处理中得到了广泛应用。本系列主要关注于CRF的特殊形式:线性链(Linear chain) CRF。本文关注与CRF的模型基础。 1.什么样的问题需要CRF模型 和HMM类似,在讨论CRF之前,我们来看看什么样的问题需要CRF模型。这里举一个简单的例

  • 本文向大家介绍C#程序暂停线程,包括了C#程序暂停线程的使用技巧和注意事项,需要的朋友参考一下 要在C#中暂停线程,请使用方法。 您需要设置线程要暂停的毫秒数,例如5秒钟,请使用- 示例 让我们看看如何循环并设置sleep方法来暂停线程。 输出结果