我有一个具有以下属性的春季批处理作业:
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 被跳过?
我无法弄清楚这一点。或者为什么它会跳过完全失败的块。
任何帮助,将不胜感激。
大卫。