我有一个 Spring Batch 作业,它从 Web 服务读取数据,在处理器中进行一些丰富,然后保存到数据库。如果有人对同一组参数运行相同的作业两次,我想删除数据库中的旧数据,然后作为该作业的一部分重新编写。
我已经在StepExecutionListener中的Step Method之前编写了删除逻辑。
如何使我的步骤具有事务性,以便在作业中出现错误时回滚删除操作?
this.stepBuilderFactory.get("xStep")
.<Item,Item>chunk(1000)
.reader(xReader)
.processor(xProcessor)
.writer(xWriter)
.listener(xStepExecutionListenerForDelete)
.build()
最佳答案
How can I make my step transactional so that if there is an error in the job the delete operation is rolledback?
您可以将删除逻辑编写为项目编写器的一部分,该逻辑在 Spring Batch 驱动的事务内部调用。如果事务因任何原因回滚,您的删除操作也会回滚。请注意,项目写入器不仅用于插入数据,还可以用于更新数据和删除数据(MongoItemWriter#setDelete 是一个示例)。
关于java - StepExecutionListener 中的 Spring Batch 事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61585083/