当前位置: 代码迷 >> 综合 >> JDBCTemplate 事务控制
  详细解决方案

JDBCTemplate 事务控制

热度:53   发布时间:2023-12-01 23:41:47.0

**项目场景:**批量导入,前端解析Excel数据,然后批量传入到后端,后端根据数据进行解析,然后在表和关联表进行操作。当对一行数据操作时,如果有错误信息则捕获异常,则不插入该条信息,继续走下。Excel单行数据出错时,要进行回滚,不仅要在单表中回滚,还要在关联表中回滚。

问题: 如何控制事务?如果单表插入数据成功,关联表失败,如果把该单表的数据也回滚,还不能保证前面已经执行完的数据再回滚。

解决: 项目使用的是JDBCTemplate,因为不要抛异常,所以使用try-catch捕获异常
代码:
try { baseDao.operationData(sql1); baseDao.operationData(sql1); baseDao.operationData(sql1); }catch(Exception e){
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
//throw new RuntimeException() //抛出RuntimeException 也会回滚
}

分析: 事务控制是抛出RuntimeException(),会进行回滚,例如,除数为0.则会对多条执行SQL进行回滚,但是这样效果不是很好。
我们也可以手动设置事务的回滚TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
通过设置事务的状态,达到事务的回滚,最后一条数据执行失败,前面的数据也会回滚。

  相关解决方案