Spring-Mybatis 子方法事务不生效问题

来源:互联网 发布:情侣头像 知乎 编辑:程序博客网 时间:2024/05/16 08:01

问题描述

使用Spring/Mybatis的项目事务不生效

问题定位

定位发现为部分接口事务不生效。不生效的事务的接口特征为

public void confirmReturnBooks(List<ReturnBookInfoDTO> returnBookInfoDTOS, Integer uid, List<ReturnBookInfoDTO> returnSuccessedBooks) throws AntException {        for(ReturnBookInfoDTO returnBookInfoDTO : returnBookInfoDTOS){            try{             confirmReturnBook(returnBookInfoDTO,uid);             returnSuccessedBooks.add(returnBookInfoDTO);            }catch (Exception e){                throw new AntException(e.getMessage());            }        }    }

做为service被controller调用的入口方法。事务在下一级方法confirmReturnBook中启用

@Transactional(rollbackFor = Throwable.class)public void confirmReturnBook(ReturnBookInfoDTO returnBookInfoDTO, Integer uid) throws AntException {   .....}

这种调用方法事务并不会被spring识别。需要将事务放在被controller调用的接口上

问题解决

  • 可以在总入口方法也加上@Transactional 这样在整个方法上开启事务,上例中在confirmReturnBooks方法上加上@Transactional
  • 将非事务处理的部分放到controller上处理。上例中将confirmReturnBooks提到controller层处理