标签: jbatch

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

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

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

当有很多例外时,大多数项目将被多次处理。在这种极端情况下,所有项目都会在编写器中引发异常:

  • 读取前15个项目
  • 第一项发生例外
  • 块将回滚并配置为item-count = 1
  • 第一项被阅读
  • 再次发生异常,项目被跳过
  • 继续进行其他14个项目,每个项目可能会发生异常,每个项目都将被跳过
  • 在前15个项目之后,该块以item-count = 15返回
  • 读取项目16-30
  • 再次发生异常
  • 阅读器回滚到最新的检查点

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

如果存在许多此类失败,则批次将一次又一次地处理所有项目。

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

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

在Spring Batch中如何实现?

java java-ee jsr352 jbatch jberet

5
推荐指数
1
解决办法
273
查看次数

标签 统计

java ×1

java-ee ×1

jbatch ×1

jberet ×1

jsr352 ×1