有两个方法m1()和m2(),m1()调用了m2
public void m1() {
doSth();
m2();
}
1. m1有事物,m2也有事物
1.1 m2的propagation=Propagation.REQUIRES_NEW
m2将开启一个新事物,运行在自己的新事物中,与m1点事物是不同的事物,如果m2报错,则m2回滚,m1是否回滚,要看m2报的是哪种类型的错误,如果是运行时异常且异常未被吃掉(catch住),则m1也回滚,如果不是运行时异常m1不回滚。
m1中可以通过noRollbackFor={XXX.class}指定事物的回滚规则,指定哪些异常不回滚。
1.2 m2的propagation=Propagation.REQUIRED
m1和m2运行在m1的事物中。
2.m1无事物, m2有事物
如果m2报错,则m2回滚,m1的代码是否执行成功,要看m2报的是哪种类型的错误,如果是运行时异常且异常未被吃掉(catch住),则m1的代码不会执行成功,如果不是运行时异常m1会执行成功。