@Transactional(propagation = Propagation.SUPPORTS)
@Override
public Stu getStuInfo(int id) {
return stuMapper.selectByPrimaryKey(id);
}
- REQUIRED(required):使用当前的事务,如果当前没有事务,则自己新建一个事务,子方法是必须运行在一个事务中的。如果当前存在事务,则加入这个事务,成为一个整体。(举例:子方法有事务,调用的方法不一定要有事务,但若调用的父方法有事务,子方法也会有事务支持。多用于 增删改)
- SUPPORTS(supports):如果当前有事务,则使用事务;如果当前没有事务,则不使用事务。(不管子方法有没有事务,若父调用方法有事务,则子方法有事务,反之,父没子没。多用于 查询)
- MANDATORY(mandatory):该传播属性强制必须存在一个事务,如果不存在,则抛出异常(举例:子方法有事务支持,那么调用该方法的父方法也必须有事务,不然抛出异常)
- REQUIRES_NEW(requires_new):如果当前有事务,则挂起事务,并且自己创建一个新的事务给自己用;如果当前没有事务,则同REQUIRED
- NOT_SUPPORTED(not_supported):如果当前有事务,则把事务挂起,自己不使用事务去执行数据库操作。
- NEVER(never):如果当前有事务存在,则抛出异常。
- NESTED(nested):如果当前没有事务,则开启子事务(嵌套事务),嵌套事务是独立提交或回滚;如果当前没有事务,则同REQUIRED。但是如果主事务提交,则会携带子事务一起提交。如果主事务回滚,则子事务一起回滚。相反,子事务异常,则父事务可选择回滚或不回滚(抛出子事务的异常就不用回滚,不抛出就一起回滚)