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

Spring批处理:重试后跳过

武功
2023-03-14

假设我有一个像这样配置的简单任务:

<batch:tasklet>
  <batch:chunk reader="myItemReader" writer="myItemWriter" commit-interval="20" retry-limit="15" skip-limit="10">
    <batch:retryable-exception-classes>
      <batch:include class="de.codecentric.MyRetryableException" />
    </batch:retryable-exception-classes>
    <batch:skippable-exception-classes>
      <batch:include class="de.codecentric.MySkippableException" />
    </batch:skippable-exception-classes>
  </batch:chunk>
</batch:tasklet>

当抛出MyRetryableException时,我重试了15次,但最后我得到了org。springframework。重试。RetryException:处理时恢复程序中不可跳过的异常;嵌套异常是作业随后终止。

如果重试15次没有帮助,我想跳过这个项目,而不是彻底失败。我是否应该将RetryException添加到可跳过的异常类列表中?


共有1个答案

汲品
2023-03-14

您可以将MyRetryableExctive包含在可跳过异常中,一旦重试完成,它将使Spring批处理跳过异常

 类似资料:
  • 我定义了一个块,提交间隔为10,跳过限制为10。处理器类通过应用一些算术运算来操作字段。其中一条记录(比如第6条记录)在处理器类中发生异常。在此之后,再次处理1到5条记录,跳过第6条记录,处理7到10条记录,并将其写入XML(自定义XML编写器类)。由于处理器处理1-5条记录两次,因此预期字段值计算两次是错误的。您能否建议一种解决方案,让处理器只处理一次记录,只跳过失败的记录,并将处理后的记录写入

  • 我有以下步骤在批处理工作。 当某个异常抛出时,我在parseStepSkipListener中捕捉他并登录数据库。 我期待以下行为: 作业已启动 执行前面的步骤 开始执行解析步骤 阅读项目 进程项 写 哦,异常。 捕获异常,登录数据库,转到下一个块(读取、处理、写入)。 作业已启动 执行前面的步骤 开始执行解析步骤 阅读项目 进程项 写 哦,异常。 进程项 写入项 哦,异常。 捕获异常,登录数据库

  • 我从某个时候起就被这个问题困扰着。 我使用的是spring batch 3.0.7 问题是在ItemWriter中的一个记录中出现org.springframework.dao.DataIntegrityViolationExcue的情况下,组块(组块大小=10)中的其余记录也不会插入到数据库中,即使在提供了skipPolicy之后(对于所有异常返回true)。 我的理解是,如果在提交整个大块时出

  • 我有以下一个批处理的Spring配置。我在生产批处理中遇到过一个问题,当一个特定的用例抛出一个不可跳过的异常时。当我在集成测试中复制用例时,批处理行为仍然很奇怪。当我的batch.commit-interval属性大于1时,将触发重试机制,回滚未提交的块,并再次处理所有以前的记录。当batch-commit-interval设置为1时,一旦抛出不可跳过的异常,批处理就会失败。 我尝试了batch-

  • 我有一个工作,处理项目的大块(1000个)。这些项目被封送到一个JSON有效负载中,并作为一个批处理发布到远程服务(在一个HTTP POST中所有1000个)。有时远程服务陷入困境,连接超时。我为此设置了跳过 如果一个块失败了,批处理重试这个块,但一次一个项目(为了找出是哪个项目导致了失败)但在我的情况下,没有一个项目导致了失败,这是整个块作为块成功或失败的情况,应该作为块重试(事实上,下降到单项

  • 我的阅读器配置如下: 另外,在读取器进入测试方法之前,不调用open(executionContext)方法,这是不对的,因为我使用这些作业参数来检索调用读取方法时需要可用的一些数据。这可能与上面的问题有关,因为关于使用后期绑定进行测试的文档说“读取器被初始化并绑定到输入数据”。