@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);
    }
}