事务的传播特性
个人博客
在一些业务场景中,会涉及到多张表的操作,也就是说会有多个事务存在,如何管理这些事务,就是会利用到spring中的事务传播特性。
Propagation | 传播特性 |
---|---|
REQUIRED | 有事务则参与事务,没有事务则创建事务 |
REQUIRES_NEW | 不管有没有事务,总是创建新事务,两个事务保持独立 |
MANDATORY | 有事务则参与事务,没有事务则报错 |
NEVER | 必须按非事务方式执行,有事务则报错 |
NESTED | 有事务则嵌套事务,没有事务则创建事务 |
NOT_SUPPORTED | 无论有无事务总是按照非事务方式执行 |
SUPPORTS | 有事务则参与事务,没有事务则按非事务方式执行 |
说明
- 嵌套事务比如A事务嵌套了B事务,B会随着A回滚事务,但A不会随着B回滚事务。
- 利用了Spring的面向切面特性(动态代理),需要跨业务类调用才会使
@Transactional
注解生效。 - REQUIRES_NEW和NOT_SUPPORTED会挂起当前事务,使用时注意死锁。
- 事务的传播特性需要在同一个数据源(事务管理器)下才生效。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 赵晓斌技术博客!
评论