事务的传播

@Service
public class TestTransaction {

    @Autowired
    private StuService stuService;

    /** propagation的传播方式详解
     *  REQUIRED 默认的传播方式,如果当前事务不存在则创建一个事务,如果当前事务存在则加入
     *  SUPPORTS 如果当前存在事务则加入,不存在也不会创建
     *  MANDATORY 如果当前不存在事务则会抛出一个异常
     *  REQUIRES_NEW 如果当前存在事务则挂起自己新建一个事务
     *                不存在事务则新建一个事务
     *  NOT_SUPPORTED 无事务的运行,如果当前存在事务则挂起
     *  NEVER  无事务的运行,如果当前存在事务则抛出一个异常
     *  NESTED 如果当前存在事务则嵌套在当前事务中,随着主事务提交和回滚
     *          如果子事务发生异常,当前事务可以回滚或者不回滚
     */
    @Transactional(propagation = Propagation.REQUIRED)
    public void run() {
        stuService.parent();
//        try {
            stuService.child();
//        } catch (Exception e) {
//            e.printStackTrace();
//        }
       //  int a = 1 / 0;
    }
}

  

@Service("stuService")
public class StuService {

    @Autowired
    private StuMapper stuMapper;



    public void parent() {
        Stu stu = new Stu();
        stu.setName("parent");
        stu.setAge(30);
        stuMapper.insert(stu);
    }

    @Transactional(propagation = Propagation.REQUIRES_NEW)
    public void child() {
        child1();
        int a = 1 / 0;
        child2();
    }

    private void child1() {
        Stu stu = new Stu();
        stu.setName("child1");
        stu.setAge(20);
        stuMapper.insert(stu);
    }

    private void child2() {
        Stu stu = new Stu();
        stu.setName("child2");
        stu.setAge(21);
        stuMapper.insert(stu);
    }

}

  

posted @ 2020-03-17 20:06  feixiong1688  阅读(118)  评论(0编辑  收藏  举报