首页 文章

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

提问于
浏览
0

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

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

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

2 回答

  • 0

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

  • 0

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

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

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

    Chunkoriented processing

    面向块的处理是指一次读取一个数据,并在事务边界内创建将被写出的“块” . 从ItemReader读入一个项目,传递给ItemProcessor,并进行聚合 . 一旦读取的项目数等于提交间隔,整个块就会通过ItemWriter写出,然后提交事务 .

    也可以看看:

相关问题