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