我使用spring批处理读取数据表单数据库并将其写入文件 .
以下是涉及的步骤:
1.从数据库中读取数据
2.将数据写入文件
3.如果文件写入成功,则更新数据库行 .
根据spring批处理文档和其他来源,我可以使用JdbcBatchItemWriter来更新数据库条目 . 但是在更新行时我找不到任何控制提交/回滚的机制 .
假设有100行,第45行发生错误,我需要回滚所有更新 .
JdbcBatchItemWriter中是否有某种方式显式提交或回滚事务?
EDIT
Itemwriter将数据以块的形式存档 . 一旦写入块,我需要更新数据库中的记录 . 使用JdbcBatchItemWriter完成数据库更新 . 假设5个块成功写入,并且块6在第45个记录中抛出错误,我需要回滚所有块 . 因此,我需要在JdbcBatchItemWriter中进行提交/回滚控制 .
2 回答
默认情况下,Spring Batch无法回滚已提交的事务 . 您需要做的是在另一个步骤中添加补偿逻辑,如果相关步骤失败,将会调用该逻辑 .
一般提交/回滚或事务行为由框架提供和控制,这同样适用于使用skip的容错步骤
该行为由spring批处理自动提供,它将被回滚并且 - 通过使用跳过逻辑 - 将处理和提交其他99行
Chunkoriented processing:
也可以看看:
CommitInterval
skip logic