首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring事务的传播行为

Spring事务的传播行为

作者头像
ppxai
发布2020-09-23 17:44:22
发布2020-09-23 17:44:22
1.1K00
代码可运行
举报
文章被收录于专栏:皮皮星球皮皮星球
运行总次数:0
代码可运行

事务的传播特性

事务的传播特性就是当一个事务方法被另一个事务方法调用的时候,这个事务方法应该如何执行。

以 Java 为例,Java 的 Spring 框架中,使用注解的方式来使用事务非常简洁方便:

代码语言:javascript
代码运行次数:0
运行
复制
@Service
public class PersonServive {
    @Transactional(propagation = Propagation.REQUIRED)
    public void methodA() {
        System.out.println("run method a.");
        methodB();
    }
  
    @Transactional(prapagation = Propagation.REQUIRES_NEW)
    public void methodB() {
        System.out.println("run method b.");
    }
}

例子当中,方法 A 调用方法 B,两个方法都用注解显式的标识了开启的事务模式,其中方法 A 开启的是 PROPAGATION_REQUIRED ,方法 B 开启的是 PROPAGATION_REQUIRES_NEW ,这种传播机制下,就是方法 B 有自己的事务,出错就回滚,没出错就提交,对方法 A 是不会产生影响的,无论是方法 A 最后是回滚还是提交,对于方法 B 事务的执行,不会产生影响。两个事务都是互不影响。

Spring 中的七种事务传播机制

1. 不需要事务

PROPAGATION_NEVER : 没有就非事务执行,有就抛异常。

PROPAGATION_NOT_SUPPORTED : 没有就非事务执行,有就直接挂起,然后非事务执行

2. 可以有事务,也可以没有事务

PROPAGATION_SUPPORTS : 调用者有事务就加入,一起在事务中执行,没有就非事务执行。

3. 一定需要事务

PROPAGATION_REQUIRES_NEW : 有没有都新建事务,如果调用者有事务,就挂起调用者已经开启的。自己新建事务。

PROPAGATION_REQUIRED : 如果没有,就新建一个事务,如果有,就加入当前事务,一起在事务中运行。Spring 默认是这种类型。

PROPAGATION_NESTED : 如果没有事务,就新建一个事务,如果原来有,就在当前事务中嵌套其他事务。

PROPAGATOIN_MANDATORY : 如果没有事务就报错,如果有事务,就参与当前事务,一起在事务中执行。

需要注意的是对于 PROPAGATION_NESTED ,里层事务的回滚,不会影响外层事务。但是,如果外层事务出异常回滚,里层的事务也会回滚,比如前面例子当中的方法 A 和方法 B,如果方法 A 回滚,方法 B 即使成功不报错可以提交,也会回滚。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020年05月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 事务的传播特性
  • Spring 中的七种事务传播机制
    • 1. 不需要事务
    • 2. 可以有事务,也可以没有事务
    • 3. 一定需要事务
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档