我有一个表A,用MyBatisPagingItemReader读取,处理,用MyBatisBatchItemWriter将结果写入表B,然后我想删除我已经处理的记录在表A中,该怎么办?使用spring-batch,如何删除已处理的数据
0
A
回答
0
我想这个自定义动作的最佳方式是添加StepListener。 像这样
@Bean
public Step stepA(ItemReader<String> readerA, ItemWriter<String> writerA) {
return stepBuilderFactory.get("stepA").<String, String> chunk(1)
.reader(readerA).writer(writerA).listener(stepListener()).build();
}
你必须实现StepExecutionListener。
public class CustomStepListener implements StepExecutionListener {
@Override
public void beforeStep(StepExecution stepExecution) {
System.out.println("StepExecutionListener - beforeStep");
}
@Override
public ExitStatus afterStep(StepExecution stepExecution) {
System.out.println("StepExecutionListener - afterStep. Here we will delete all records");
return null;
}
}
在这一步,你愿意,你可以删除记录的范围。 SqlQuery,Repository等
0
我会建议使用CompositeItemWriter。添加MyBatisBatchItemWriter作为第一个写入器并添加第二个写入器,删除表A中的条目。
这样,所有内容都运行在同一个事务中;因此,不存在数据不一致的风险。
相关问题
- 1. 如何使用删除处理程序
- 2. 如何处理backstack引用已删除的项目
- 3. 在Firebase中处理已删除的ID
- 4. 如何在Git下处理一堆已删除的文件?
- 5. 如何处理活动流中已删除的照片
- 6. 在MATLAB中删除/处理数据
- 7. 如何处理用户删除
- 8. 团队项目删除停留在“已删除(处理)”
- 9. SQL数据库已删除标志并已删除已删除对于
- 10. PHP/MYSQL - 使用预处理语句删除数据库
- 11. SpringBatch:动态数据源值
- 12. 如何处理动态数据删除命令?
- 13. 数据库:关于更新和删除 - 如何处理?
- 14. 如何删除正在处理的SMS?
- 15. 如何在从Laravel的模型中删除数据之前处理数据?
- 16. 如何使用use-default-template = false处理portlet的删除操作?
- 17. 使用已删除的函数std :: unique_ptr
- 18. 如何使用AMO(分析管理对象)删除数据库?
- 19. 我们如何处理Azure数据管理网关中的更新和删除
- 20. 使用mousepressed()处理删除矩形
- 21. 使用Python删除处理指令lxml
- 22. 处理Shift +删除
- 23. 如何处理删除DOM效果?
- 24. 如何删除文件处理C++中
- 25. SQL:你如何处理条件删除?
- 26. 如何使用ID在批处理中删除多个对象?
- 27. 如何使用批处理文件删除换行
- 28. 如何使用rabbitmq批处理文件删除队列
- 29. 如何使用批处理文件删除文件
- 30. Gridview显示已删除的数据
我会推荐这种方法,因为侦听器在单独的事务中运行。 (看看这篇文章:https://blog.codecentric.de/en/2012/03/transactions-in-spring-batch-part-2-restart-cursor-based-reading-and-listeners/)。 –