需要了解事务的传播需要只要一个知识点。就是在一个服务执行中,服务入口为事务管理者,该服务里面具体方法为是事务协调者;了解了什么是事务管理者和什么是事务协调者请继续往下看:
事务的传播机制(propgation)由7种如下:
1.propgation-REQUIRED
1>事务管理者携带事务,事务协调者则加入该事务,与事务管理者一起成功或者一起失败;
2>事务管理者不携带事务,事务协调者则新建事务执行;
2.propgation-New
1>事务管理者携带事务,事务协调者则新建事务执行;
2>事务管理者不携带事务,事务协调者则新建事务执行;
3.propgation-SUPPORTS
1>事务管理者携带事务,事务协调者则加入该事务,与事务管理者一起成功或者一起失败;
2>事务管理者不携带事务,事务协调者则也不携带事务;
4.propgation-NOT_SUPPORTED
1>事务管理者携带事务,事务协调者不携带事务(事务协调者不加入管理者事务也不创建事务);
2>事务管理者不携带事务,事务协调者不携带事务;
5.propgation-MANDATORY
1>事务管理者携带事务,事务协调者则加入该事务,与事务管理者一起成功或者一起失败;
2>事务管理者不携带事务,事务协调者则报错必须管理者携带事务;
6.propgation-NEVER
1>事务管理者携带事务,事务协调者则报错,管理者不能携带事务;
2>事务管理者不携带事务,事务协调者不携带事务;
7.propgation-NESTED
嵌套(NESTED)事务:
1>如果当前事务存在,那么在嵌套的事务中执行。如果当前事务不存在,则表现跟REQUIRED一样,,新建一个事务运行。
2>如果管理者事务回滚,协调者事务也会跟着回滚;如果协调者事务回滚,并抛出异常,管理者事务肯定会跟着回滚;
3>如果当前没有事务,和REQUIRED,新建一个事务运行;
4>当异常事务回滚时,回滚到事务回滚点(savePoint),交由客户端处理提交还是回滚;