我正在改进一个数据加载器,它从平面文件中读取数据,并使用 jdbctemplate 批量插入每 500 个项目。我正在使用 java 执行器固定线程池来提交任务,它会读取每个文件并进行批量更新。例如,当读取第一个文件时,如果在第 3 个批量插入期间失败,则需要回滚该文件的所有先前的批量插入。该任务应继续处理下一个文件并创建一个新的事务用于插入。我需要一个可以做到这一点的代码。目前,我正在使用 transactiontemplate 并将批插入代码包装在 doInTransactionwithoutcallback
中,并在 catch block 中调用 transaction status.setrollbackonly 发生异常期间。但我需要一个可以为下一个文件创建新事务的代码,无论最后一个文件是失败还是成功。设置传播到需要新的解决方案吗?
最佳答案
正如肖恩评论的那样,你不应该重新发明整个事情,并使用 Spring Batch相反。
Spring Batch 将允许您:
- partition执行(例如使用线程池执行器)
- map records在文件到对象中
- 设置右侧commit interval ,它会在其中提交已处理记录的“ block ”,并且 rollback万一其中任何一个“错误”
- 指定什么错误 skippable , retryable
- 还有更多
它已经存在 => 已编码、经过测试并且很棒。
关于java - 用于从文件中批量插入项目的 Spring jdbc 编程事务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7867642/