微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

块处理模式下的Spring Batch事务回滚

如何解决块处理模式下的Spring Batch事务回滚

我试图了解当在块步骤的编写器中引发异常时发生的情况。 我有一个JdbcItemReader,一个处理器和一个JPAItemWriter。 我使用了JdbcItemReader,因为处理器会修改在读取器的where条件中也使用的字段的值。

如果在JPAItemWriter中引发了异常,则事务被标记为已回滚,将块大小设置为1,并且Spring Batch会一次向处理器发送一项以了解正在引发异常的项目。
重试阶段发送到处理器的项目没有原始字段值是否正常?它具有在处理器第一次运行期间修改的值。
这样,处理器的第二次运行可能与第一次运行不同。

任何人都可以帮助我了解发生了什么事吗?

解决方法

这很正常,因为在重试期间会缓存项目。如果要禁用该功能,则需要设置FaultTolerantStepBuilder#processorNonTransactional()标志。

也就是说,这里要提到两个重要的细节:

  • 您应该正确实现equalshashcode,因为这些方法用于标识重试中的项目。
  • 在容错步骤中,ItemProcessor实现应是幂等的,如参考文档的Fault tolerance部分所述

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。