我使用spring批处理读取数据表格数据库并将其写入文件
以下是涉及的步骤:
1.从数据库中读取数据
2.将数据写入文件
3.如果文件写入成功,则更新数据库行。
根据spring批处理文档和其他来源,我可以使用JdbcBatchItemWriter来更新数据库条目。但是在更新行时我找不到任何控制提交/回滚的机制 假设有100行,第45行发生错误,我需要回滚所有更新 在JdbcBatchItemWriter中是否有某种方法可以显式提交或回滚事务?
修改
Itemwriter将数据以块的形式存档。一旦编写了一个块,我需要更新数据库中的记录。使用JdbcBatchItemWriter完成数据库更新。假设5个块成功写入,并且块6在第45个记录中抛出错误,我需要回滚所有块。因此,我需要在JdbcBatchItemWriter中提交/回滚控制。
答案 0 :(得分:0)
提交/回滚或事务性行为通常由框架提供和控制,这同样适用于使用skip的容错步骤
假设有100行,第45行发生错误,我需要回滚所有更新。 在JdbcBatchItemWriter中是否有某种方法可以显式提交或回滚事务?
该行为由spring批处理自动提供,它将被回滚,并且 - 通过使用跳过逻辑 - 将处理和提交其他99行
面向块的处理是指一次读取一个数据, 并创造' chunks'将在交易中写出来的 边界。从ItemReader读入一个项目,交给一个 ItemProcessor和聚合。一旦读取的项目数等于 提交间隔,整个块通过 ItemWriter,然后提交事务。
另见:
答案 1 :(得分:0)
默认情况下,Spring Batch无法回滚已提交的事务。您需要做的是在另一个步骤中添加补偿逻辑,如果相关步骤失败,将会调用该步骤。