使用JdbcBatchItemWriter控制spring批处理中的提交/回滚

时间:2015-04-09 09:28:46

标签: java database transactions spring-batch commit

我使用spring批处理读取数据表格数据库并将其写入文件 以下是涉及的步骤:
1.从数据库中读取数据
2.将数据写入文件
3.如果文件写入成功,则更新数据库行。

根据spring批处理文档和其他来源,我可以使用JdbcBatchItemWriter来更新数据库条目。但是在更新行时我找不到任何控制提交/回滚的机制 假设有100行,第45行发生错误,我需要回滚所有更新 在JdbcBatchItemWriter中是否有某种方法可以显式提交或回滚事务?

修改
Itemwriter将数据以块的形式存档。一旦编写了一个块,我需要更新数据库中的记录。使用JdbcBatchItemWriter完成数据库更新。假设5个块成功写入,并且块6在第45个记录中抛出错误,我需要回滚所有块。因此,我需要在JdbcBatchItemWriter中提交/回滚控制。

2 个答案:

答案 0 :(得分:0)

提交/回滚或事务性行为通常由框架提供和控制,这同样适用于使用skip的容错步骤

  

假设有100行,第45行发生错误,我需要回滚所有更新。   在JdbcBatchItemWriter中是否有某种方法可以显式提交或回滚事务?

该行为由spring批处理自动提供,它将被回滚,并且 - 通过使用跳过逻辑 - 将处理和提交其他99行

Chunkoriented processing

  

面向块的处理是指一次读取一个数据,   并创造' chunks'将在交易中写出来的   边界。从ItemReader读入一个项目,交给一个   ItemProcessor和聚合。一旦读取的项目数等于   提交间隔,整个块通过   ItemWriter,然后提交事务。

另见:

答案 1 :(得分:0)

默认情况下,Spring Batch无法回滚已提交的事务。您需要做的是在另一个步骤中添加补偿逻辑,如果相关步骤失败,将会调用该步骤。