-
事务管理员
-
事务协调员
-
事务传播行为描述的是事务协调员对事务管理员所携带事务的处理态度
1、Spring中七种事务传播行为
事务传播行为类型 | 说明 |
---|---|
PROPAGATION_REQUIRED | 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。 |
PROPAGATION_SUPPORTS | 支持当前事务,如果当前没有事务,就以非事务方式执行。 |
PROPAGATION_MANDATORY | 使用当前的事务,如果当前没有事务,就抛出异常。 |
PROPAGATION_REQUIRES_NEW | 新建事务,如果当前存在事务,把当前事务挂起。 |
PROPAGATION_NOT_SUPPORTED | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
PROPAGATION_NEVER | 以非事务方式执行,如果当前存在事务,则抛出异常。 |
PROPAGATION_NESTED | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 |
2、传播属性与事务管理员和事务协调员的关系
3、事务传播应用
-
场景A:生成订单业务
-
子业务S1:记录日志到数据库表X
-
子业务S2:保存订单数据到数据库表Y
-
子业务S3:……
-
如果S2或S3或……事务提交失败,此时S1是否回滚?如何控制?
-
(S1需要新事务)
-
-
场景B:生成订单业务
-
背景1:订单号生成依赖数据库中一个专门用于控制订单号编号生成的表M获取
-
背景2:每次获取完订单号,表M中记录的编号自增1
-
子业务S1:从表M中获取订单编号
-
子业务S2:保存订单数据,订单编号来自于表M
-
子业务S3:……
-
如果S2或S3或……事务提交失败,此时S1是否回滚?如何控制?
-
(S1需要新事务)
-
4、小结
-
事务传播行为修饰的是协调员针对管理员所携带事务的态度
-
企业开发过程中,发现属于同一事务控制的各个业务中,如果某个业务与其他业务隔离度较高,拥有差异化的数据业务控制情况,通常使用事务传播行为对其进行控制。