Spring事务的传播行为
事务传播行为类型 | 说明 |
REQUIRED | 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。spring默认使用此传播类型 |
REQUIRES_NEW | 新建事务,如果当前存在事务,把当前事务挂起。 |
SUPPORTS | 支持当前事务,如果当前没有事务,就以非事务方式执行。 |
NOT_SUPPORTED | 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 |
MANDATORY | 使用当前的事务,如果当前没有事务,就抛出异常 |
NEVER | 以非事务方式执行,如果当前存在事务,则抛出异常。 |
NESTED | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。 |
用户账户表(账户balance为无符号类型)
图书信息表
一、图书购物车服务层(事务) 默认REQUIRED
付款
结果:两个都不成功
用户账户表(账户balance为无符号类型)
图书信息表
二、图书购物车服务层(事务) REQUIRES_NEW
付款
结果:第一次成功付款,第二次付款失败
用户账户表(账户balance为无符号类型)
图书信息表