spring batch 事务

本文深入探讨SpringBatch中的事务处理机制,介绍了如何通过配置实现复杂的事务行为,包括批处理任务的重启、重试及跳过失败项等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  这是一系列关于Spring Batch 事务的第一篇,你可以再这里找到第二篇,它是关于重启一个批处理,它是基于游标的度和监听,第三篇在这里,它关于跳跃和重试。

  事务在几乎所有的应用中都很重要,但是在Spring 批处理中处理事务显得有一些棘手,在标准的应用中,你常常只需要给一个用户动作开启一个事务,作为一个开发者,你通常只需要确认你的代码已经处于一个事务中或者在没有事务的时候闯进一个新的事务(传播 typeREQUIRED)。那就是说,开发批处理任务在事务上有很多头疼的事情。显然,在整个批处理中你不能只用一个事务,数据库也无法处理这种场景,所以需要在一个批处理的中间某一个阶段提交事务。一个失败的批处理并不意味着你需要回滚一些数据,你需要的是使用某些特性比如重启一个失败的批处理,重试或者跳过失败的项目,你自动的获取一个复杂的事务行为,Spring 批处理仅仅以声明的方式做到这些,但是它是如何工作的呢?

  Spring 批处理是一个杰出的框架,它有许多文档和一些好的书籍,但是纵然读了许多关于Spring 批处理的框架,我还是不能确认关于事务处理这一块,所以最终的办法就是阅读它的源代码和跟踪调试。所以,这里不会介绍关于Spring 批处理,我仅仅是专注于介绍事务,我假设你熟悉Spring中的事务处理(事务管理,事务属性)。我将自己的讨论限制在一个小的范围内,我将仅仅讨论面向处理的线程块。

面向块的步骤

  让我们从一张指引我们整个路线图的图片和下面的 一些博客文章开始,仅仅在细节上做一点修改,然后专注于某一主题。

  

  它已经告诉我们许多关于Spring 批处理和它的事务行为信息了。在面向块的处理中,我们使用ItemReaders一个接一个的读取项目,并且传递下一个项目。当没有下一个是,Reader 将会传递null。然后我们使用可选的ItemProcessors使用一个项目并且传递一个项目,它可能是另一种类型。最终,我们使ItemProcessors拥有一个项目列表,并在其他地方对其进行写入。

  批处理被许多块进行分割,每一个块在自己的事务中进行处理,块的大小由CompletionPolicy决定,你可以在(1)中看到关于它的描述:当 CompletionPolicy完成,Spring 批处理停止reading items 并且开始processing。默认的,假如你在块上面使用commit-interval属性,你就获取一个SimpleCompletionPolicy属性,当

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值