事务的传播
@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); } }