java - StepExecutionListener 中的 Spring Batch 事务

标签 java spring transactions spring-batch

我有一个 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/

相关文章:

java - 我在字符串中得到了 JSON 响应,我将其拆分并尝试在 android spinner 中显示,但它在 spinner 中显示整个字符串

c# - 如果下一个表事务失败,如何删除上一个表事务

c# - Java 事务 API 和 .NET System.Transactions

java - 在 Hibernate 中使用 HQL 在一个表中插入数据

java - 使用 Java 写入文件

java - 字段列表中的 Spring Boot JPA 未知列

java - 使用 Redis 限制 Spring Boot 中的 session

java - 无法解决 DispatcherServlet 的 ClassNotFoundException(在 Spring 上)

php - 在 Yii 中循环使用事务

java - 为什么 sysout 不起作用?