个人博客


在一些业务场景中,会涉及到多张表的操作,也就是说会有多个事务存在,如何管理这些事务,就是会利用到spring中的事务传播特性。

Propagation传播特性
REQUIRED有事务则参与事务,没有事务则创建事务
REQUIRES_NEW不管有没有事务,总是创建新事务,两个事务保持独立
MANDATORY有事务则参与事务,没有事务则报错
NEVER必须按非事务方式执行,有事务则报错
NESTED有事务则嵌套事务,没有事务则创建事务
NOT_SUPPORTED无论有无事务总是按照非事务方式执行
SUPPORTS有事务则参与事务,没有事务则按非事务方式执行

说明

  1. 嵌套事务比如A事务嵌套了B事务,B会随着A回滚事务,但A不会随着B回滚事务。
  2. 利用了Spring的面向切面特性(动态代理),需要跨业务类调用才会使@Transactional注解生效。
  3. REQUIRES_NEWNOT_SUPPORTED会挂起当前事务,使用时注意死锁。
  4. 事务的传播特性需要在同一个数据源(事务管理器)下才生效。