propagation 事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。
例:@Transactional(propagation=Propagation.REQUIRED)
常见传播行为
- REQUIRED(默认值):若存在事务则加入,否则新建事务。适用于大多数场景,如普通业务操作。 12
- REQUIRES_NEW:无论是否存在事务,均新建独立事务。适用于需要独立操作且不影响原事务的场景(如审计日志)。 12
- NESTED:若存在事务,则在嵌套事务内执行;若不存在,则创建新事务。适用于需要依赖主事务但需独立提交的场景。 13
- SUPPORTS:若存在事务则加入,否则以非事务方式执行。适用于查询操作或非必须事务的场景。 34
注意事项
- 作用范围:
@Transactional
应作用于方法级别(public方法),类级别或非public方法无效。 - 异常处理:仅抛出运行时异常(如NullPointerException)会触发回滚;受查异常(如自定义异常)不会回滚。
- 间接调用:通过接口或异步任务间接调用时,默认不会触发事务回滚(需显式配置)。
属性值如下: