我正在修改一个数据加载器,它使用jdbctemplate为每500个项目读取平面文件和batchinsert . 我正在使用提交任务的java executor固定线程池,它会读取每个文件和batchupdate . 例如,当读取第一个文件时,如果在第3个batchinsert期间失败,则需要回滚此文件的所有先前batchinsert . 任务应该继续下一个文件并为插入创建一个新事务 . 我需要一个可以做到这一点的代码 . 目前我正在使用transactiontemplate并将batchinsert代码包装在 doInTransactionwithoutcallback
中,并且在catch块调用事务status.setrollbackonly中的异常期间 . 但我需要一个代码,可以为下一个文件创建新的事务,无论上一个文件是失败还是成功 . 设置传播需要新的解决方案吗?
1 回答
正如肖恩评论的那样,你不应该重新发明整个事物,而是使用Spring Batch .
Spring Batch将允许您:
partition执行(例如使用线程池执行程序)
map records在对象的文件中
设置正确commit interval,它提交"chunk"处理过的记录,rollback以防其中任何一个是"wrong"
指定哪些错误skippable,retryable
以及更多
它已经存在=>编码,测试和令人敬畏 .