gpt4 book ai didi

java - 具有可重试和可跳过异常的 jsr 352 批处理可能会多次处理项目

转载 作者:搜寻专家 更新时间:2023-10-31 20:25:05 24 4
gpt4 key购买 nike

我有一个用 JSR-352 实现的批处理(在 wildfly 上使用 jberet)。

我有一个项目计数为 15 的 block ,java.lang.Exception 被配置为可重试和可跳过的异常。

当异常较多时,大部分item都会被处理多次。在这种极端情况下,所有项目都会在编写器中引发异常:

  • 已阅读前 15 个项目
  • 第一项发生异常
  • block 被回滚并配置为 item-count = 1
  • 已阅读第一项
  • 再次出现异常,项目被跳过
  • 继续处理其他14项,每一项都可能出现异常,每一项都被跳过
  • 在前 15 个项目之后, block 以项目计数 = 15 返回
  • 已阅读第 16-30 项
  • 再次出现异常
  • Reader 回滚到最新的检查点

此时仍然没有检查点,因为还没有成功处理的项目。因此,读者再次从第一项开始。所有 30 个项目都使用 item-count = 1 处理。等等。

如果有很多这样的失败,批处理将一次又一次地处理所有项目。

我认为也需要为跳过的项目设置检查点,因为不应再次处理跳过的项目。

我认为这是规范中的一个错误,所以我已经在那里打开了一个问题:https://github.com/WASdev/standards.jsr352.batch-spec/issues/15还是我错了,误解了实现?

这在 Spring Batch 中是如何实现的?

最佳答案

我认为规范已经足够清楚了,这表明这可能是一个 JBeret 错误(假设它不是应用程序问题)。

在规范(非官方版本 here )中,该部分:

8.2.1.4.3 Retry and Skip the Same Exception

表示在回滚重试期间,一次处理一个项目(以一个项目 block 的形式),并且在重试期间跳过优先。

因此,如果在重试期间发生可跳过的异常,则该项目将被跳过,并且应该保留更新的检查点。这是如何WebSphere Liberty Batch ,我从事的 JSR 352 实现,做到了。

所以我建议制作一个重新创建的项目,如果它看起来仍然像一个 JBeret 问题,则打开一个 JBeret 问题。在这一点上,我没有看到规范问题。

关于java - 具有可重试和可跳过异常的 jsr 352 批处理可能会多次处理项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53339694/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com