问题引入
以下代码和数据做了脱敏处理
如下图所示,代码中的deleteFunc包含了对批次数据的删除操作,该功能并发删除集合数据strList,最终的现象是:某一个批次数据删除失败回滚,其他数据正常删除。
@Transactional(value="transactionManager", rollbackFor = Exception.class)public Result deleteOperation(List strList){ try{ IntStream.range(0, (strList.size() + BATCH_SIZE - 1)/BATCH_SIZE) .mapToobj(i -> strList.subList(i * BATCH_SIZE, Math.min(strList.size(), (i+1) * BATCH_SIZE))) .forEach(batch -> deleteFunc(batch)); } catch (Exception e){ TransactionAspectSupport.currentTransactionStatus().setRollbackOnliy(); } } 复制代码
- 数据表结构
- 删除语句 DELETE FROM table_name WHERE (key,position) IN ((key1, position1)......(keyn, positionn))