0

我有一个具有以下属性的春季批处理作业:

    commit-interval: 25.
    skip-limit of 3.

在我的集成测试中,我注入了一个会抛出可跳过异常的虚假编写器,而这又注入了一个 id 列表,这将导致抛出异常。

在我的测试之前,我创建了 135 行。我配置了那些行

    "9", "11", "44", "51", "70" 

都将是导致 ItemWriter 抛出异常的行。

在第一次运行时一切正常,正如预期的那样,在第 51 行 50 的 3 次提交之后,或者更确切地说,当编写器中的“某事”检测到现在已超过 3 限制的可跳过异常时,该作业失败。另外,我已经断言 9、11 和 44 已注册在我期望的可跳过侦听器中。

我意识到批处理作业在失败之前没有将项目单独包装在事务中,就像 id 对 9、11 和 44 所做的那样,因为它已经知道已达到跳过限制。

但是,当我重新启动作业时,起始行是 74 - 而不是我期望的 51。

因此从 51 到 73 被跳过?

我无法弄清楚这一点。或者为什么它会跳过完全失败的块。

任何帮助,将不胜感激。

大卫。

4

1 回答 1

0

此错误的修复将包含在 Spring Batch 的下一个版本中。

https://jira.springsource.org/browse/BATCH-2122

于 2013-10-14T19:54:17.097 回答