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

传播 typeREQUIRED)。那就是说,开发批处理任务在事务上有很多头疼的事情。显然,在整个批处理中你不能只用一个事务,数据库也无法处理这种场景,所以需要在一个批处理的中间某一个阶段提交事务。一个失败的批处理并不意味着你需要回滚一些数据,你需要的是使用某些特性比如重启一个失败的批处理,重试或者跳过失败的项目,你自动的获取一个复杂的事务行为,Spring 批处理仅仅以声明的方式做到这些,但是它是如何工作的呢?

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

面向块的步骤

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

  

spring batch传递参数 spring batch transaction_重启

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

CompletionPolicy决定,你可以在(1)中看到关于它的描述:当CompletionPolicy完成,Spring 批处理停止reading items 并且开始processing。默认的,假如你在块上面使用commit-interval属性,你就获取一个SimpleCompletionPolicy属性,当