事务的传播特性指的是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行?
spring的事务传播行为一共有7种:
备注:上面图是从其他博客截取的,忘记链接了。
应用场景:A方法中调用B和C方法 其中BC都进行-1操作 括号中的报错意思指在该方法中故意报错比如1/0这样看效果
| 执行顺序 | A(调用BC) | B(-1操作) | C(-1操作) | 结果 |
| A-->BC | REQUIRED | REQUIRED | REQUIRED | BC都会-1 BC执行 |
| A-->BC | REQUIRED | REQUIRED(报错) | REQUIRED | BC都会回滚 B执行 C不执行 |
| A-->BC | REQUIRED | REQUIRED_NEW(报错) | REQUIRED | BC都会回滚 B执行 C不执行 |
| A-->CB | REQUIRED | REQUIRED_NEW(报错) | REQUIRED | BC都会回滚(因为B报错了,A接收了错误导致C也有问题了,就会C也跟着回滚) BC都执行 |
| A-->CB | REQUIRED | REQUIRED_NEW(报错) | REQUIRED_NEW | B回滚 C-1 BC都执行 |
| A-->BC | REQUIRED | REQUIRED_NEW | REQUIRED(报错) | B-1 C回滚 BC都执行 |
| A-->CB | REQUIRED | REQUIRED_NEW | REQUIRED(报错) | B没有执行 C回滚 C执行 B不执行 |
| A-->BC | REQUIRED(报错) | REQUIRED_NEW | REQUIRED_NEW | BC-1 都不会回滚 BC都执行 |
| A-->BC | REQUIRED(报错) | REQUIRED | REQUIRED | BC都会回滚 BC都执行 |
| A-->BC | REQUIRED(报错) | REQUIRED_NEW | REQUIRED | B-1 C回滚 BC都执行 |
| A-->BC | REQUIRED(报错) | REQUIRED | REQUIRED_NEW | B回滚 C-1 BC都执行 |