栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring 事务传播行为

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring 事务传播行为

目录

前言

一、spring事务传播行为是什么?

二、Spring事务传播行为的七种类型。

 三、注意事项。

1. 调用者和被调用者都没发生异常。

2. 调用者调用完当前方法后,调用者抛出业务异常,怎么回滚?

3. 当前方法发生异常,调用者捕获当前方法的业务异常,怎么回滚?

4. 当前方法发生异常,调用者不捕获当前方法的异常,怎么回滚?

总结


前言

随着spring框架的不断发展,spring框架也越来越重要,很多人都开启了spring框架学习,本文就介绍了spring框架中的一个基础内容------spring事务传播行为。


一、Spring事务传播行为是什么?

    事务传播行为指的就是当一个事务方法(当前事务)被另一个事务方法(调用者)调用时,这个事务方法(当前事务)对另一个事务方法(调用者)的态度。

    简单说就是:事务方法A调用了事务方法B,B需要怎么应对。

二、Spring事务传播行为的七种类型。
事务传播行为类型说明
PROPAGATION_REQUIRED

表示当前方法必须在事务中运行。

如果调用者有事务,则当前方法加入到调用者事务中运行。

如果调用者没有事务,则当前方法自己新开启一个事务运行。

PROPAGATION_SUPPORTS

表示当前方法不必在事务中运行。

如果调用者有事务,则当前方法加入到调用者事务中运行。

如果调用者没有事务,则当前方法以非事务的形式运行。

PROPAGATION_MANDATORY

表示当前方法必须在调用者事务中运行。

如果调用者有事务,则当前方法加入到调用者事务中运行。

如果调用者没有事务,则当前方法抛出异常。

PROPAGATION_NESTED

表示当前方法必须在事务中运行。

如果调用者有事务,则当前方法以“嵌套事务”的形式加入到调用者事务中运行。

如果调用者没有事务,则当前方法自己新开启一个事务运行。

PROPAGATION_NEVER

表示调用者必须以非事务形式运行。

如果调用者有事务,则抛出异常。

如果调用者没有事务,则当前方法以非事务的形式运行。

PROPAGATION_REQUIRES_NEW

表示当前方法必须在事务中运行。

如果调用者有事务,则当前方法自己新开启一个事务运行。

如果调用者没有事务,则当前方法当前方法自己新开启一个事务运行。

PROPAGATION_NOT_SUPPORTED

表示当前方法不支持在事务中运行。

如果调用者有事务,则挂起调用者的事务,当前方法以非事务的形式运行。

如果调用者没有事务,则当前方法以非事务的形式运行。

 三、注意事项。

1. 调用者和被调用者都没发生异常。
事务传播行为类型调用者是否存在事务结果
PROPAGATION_REQUIRED

当前方法加入调用者的事务。

当前方法自己新开启一个事务运行。

PROPAGATION_SUPPORTS

当前方法加入调用者的事务。

当前方法以非事务的形式运行。

PROPAGATION_MANDATORY

当前方法加入调用者的事务。

调用者调用当前方法时,抛出Spring异常。

(不允许存在该场景)

PROPAGATION_NESTED

当前方法以”嵌套事务“的形式加入调用者的事务。

当前方法自己新开启一个事务运行。

PROPAGATION_NEVER

调用者调用当前方法时,抛出Spring异常。

(不允许存在该场景)

当前方法以非事务的形式运行。

PROPAGATION_REQUIRES_NEW

当前方法自己新开启一个事务运行。

当前方法自己新开启一个事务运行。

PROPAGATION_NOT_SUPPORTED

当前方法以非事务的形式运行。

当前方法以非事务的形式运行。

2. 调用者调用完当前方法后,调用者抛出业务异常,怎么回滚?
事务传播行为类型调用者是否存在事务结果
PROPAGATION_REQUIRED

当前方法加入调用者的事务。

调用者抛出异常后,一起回滚。

当前方法自己新开启一个事务运行。

调用者抛出异常后,调用者已执行的SQL不回滚。

当前方法的事务不回滚。

PROPAGATION_SUPPORTS

当前方法加入调用者的事务。

调用者抛出异常后,调用者和当前方法一起回滚。

当前方法以非事务的形式运行。

调用者抛出异常后,调用者已执行的SQL不回滚。

当前方法已执行的SQL不回滚。

PROPAGATION_MANDATORY

当前方法加入调用者的事务。

调用者抛出异常后,调用者和当前方法一起回滚。

调用者调用当前方法时,抛出Spring异常。

(不允许存在该场景)

PROPAGATION_NESTED

当前方法以”嵌套事务“的形式加入调用者的事务。

调用者抛出异常后,调用者和当前方法一起回滚。

当前方法自己新开启一个事务运行。

调用者抛出异常后,调用者已执行的SQL不回滚。

当前方法的事务不回滚。

PROPAGATION_NEVER

调用者调用当前方法时,抛出Spring异常。

(不允许存在该场景)

当前方法以非事务的形式运行。

调用者抛出异常后,调用者已执行的SQL不回滚。

当前方法已执行的SQL不回滚。

PROPAGATION_REQUIRES_NEW

当前方法自己新开启一个事务运行。

调用者抛出异常后,调用者的事务回滚。

当前方法的事务不回滚。

当前方法自己新开启一个事务运行。

调用者抛出异常后,调用者已执行的SQL不回滚。

当前方法的事务不回滚。

PROPAGATION_NOT_SUPPORTED

当前方法以非事务的形式运行。

调用者抛出异常后,调用者的事务回滚。

当前方法已执行的SQL不回滚。

当前方法以非事务的形式运行。

调用者抛出异常后,调用者已执行的SQL不回滚。

当前方法已执行的SQL不回滚。

3. 当前方法发生异常,调用者捕获当前方法的业务异常,怎么回滚?
事务传播行为类型调用者是否存在事务结果
PROPAGATION_REQUIRED

当前方法加入调用者的事务。

调用者提交事务时,抛出Spring异常。

(不允许存在该场景)

当前方法和调用者在同一个事务中,一起回滚。

当前方法自己新开启一个事务运行。

调用者以非事务的形式运行。

当前方法的事务回滚,调用者正常运行。

PROPAGATION_SUPPORTS

当前方法加入调用者的事务。

调用者提交事务时,抛出Spring异常。

(不允许存在该场景)

当前方法和调用者在同一个事务中,一起回滚。

当前方法以非事务的形式运行。

调用者以非事务的形式运行。

当前方法的已运行的SQL不回滚,调用者正常运行。

PROPAGATION_MANDATORY

当前方法加入调用者的事务。

调用者提交事务时,抛出Spring异常。

(不允许存在该场景)

当前方法和调用者在同一个事务中,一起回滚。

调用者调用当前方法时,抛出Spring异常。

(不允许存在该场景)

调用者已运行的SQL不回滚。

PROPAGATION_NESTED

当前方法以“嵌套事务”的形式加入到调用者事务中运行。

当前方法的“嵌套事务”回滚。

调用者的事务不回滚,正常运行。

当前方法自己新开启一个事务运行。

调用者以非事务的形式运行。

当前方法的事务回滚,调用者正常运行。

PROPAGATION_NEVER

调用者调用当前方法时,抛出Spring异常。

(不允许存在该场景)

调用者事务回滚。

当前方法以非事务的形式运行。

调用者以非事务的形式运行。

当前方法的已运行的SQL不回滚,调用者正常运行。

PROPAGATION_REQUIRES_NEW

当前方法自己新开启一个事务运行。

调用者以事务的形式运行。

当前方法抛出异常,当前方法事务回滚。

调用者方法正常运行。

当前方法自己新开启一个事务运行。

调用者以非事务的形式运行。

当前方法抛出异常,当前方法事务回滚。

调用者方法正常运行。

PROPAGATION_NOT_SUPPORTED

当前方法以非事务的形式运行。

调用者的事务在当前方法执行期间会被挂起,当前方法执行结束后恢复。

当前方法抛出异常,当前方法已执行的SQL不回滚。

调用者正常运行。

当前方法以非事务的形式运行。

调用者以非事务的形式运行。

当前方法抛出异常,当前方法已执行的SQL不回滚。

调用者正常运行。

4. 当前方法发生异常,调用者不捕获当前方法的异常,怎么回滚?
事务传播行为类型调用者是否存在事务结果
PROPAGATION_REQUIRED

当前方法加入调用者的事务。

调用者抛出当前方法的异常。

当前方法和调用者在同一个事务中,一起回滚。

当前方法自己新开启一个事务运行。

调用者以非事务的形式运行。

当前方法的事务回滚。

调用者抛出当前方法的异常,已执行的SQL不回滚。

PROPAGATION_SUPPORTS

当前方法加入调用者的事务。

调用者抛出当前方法的异常。

当前方法和调用者在同一个事务中,一起回滚。

当前方法以非事务的形式运行。

调用者以非事务的形式运行。

当前方法的已运行的SQL不回滚,

调用者抛出当前方法的异常,已运行的SQL不回滚。

PROPAGATION_MANDATORY

当前方法加入调用者的事务。

调用者抛出当前方法的异常,

当前方法和调用者在同一个事务中,一起回滚。

调用者调用当前方法时,抛出Spring异常。

(不允许存在该场景)

调用者抛出Spring的异常,已运行的SQL不回滚。

PROPAGATION_NESTED

当前方法以“嵌套事务”的形式加入到调用者事务中运行。

调用者抛出当前方法的异常,

当前方法的“嵌套事务”回滚。

调用者的事务回滚。

当前方法自己新开启一个事务运行。

调用者以非事务的形式运行。

当前方法的事务回滚。

调用者抛出当前方法的异常,已运行的SQL不回滚。

PROPAGATION_NEVER

调用者调用当前方法时,抛出Spring异常。

(不允许存在该场景)

调用者抛出Spring的异常,事务回滚。

当前方法以非事务的形式运行。

调用者以非事务的形式运行。

当前方法抛出异常,已运行的SQL不回滚。

调用者抛出异常,已运行的SQL不回滚。

PROPAGATION_REQUIRES_NEW

当前方法自己新开启一个事务运行。

调用者以事务的形式运行。

当前方法抛出异常,当前方法事务回滚。

调用者方法抛出异常,调用者事务回滚。

当前方法自己新开启一个事务运行。

调用者以非事务的形式运行。

当前方法抛出异常,当前方法事务回滚。

调用者方法抛出异常,调用者已执行的SQL不回滚。

PROPAGATION_NOT_SUPPORTED

当前方法以非事务的形式运行。

调用者在当前方法执行期间,事务会被挂起。

当前方法抛出异常,当前方法已执行的SQL不回滚。

调用者抛出异常,调用者事务回滚。

当前方法以非事务的形式运行。

调用者以非事务的形式运行。

当前方法抛出异常,当前方法已执行的SQL不回滚。

调用者抛出异常,调用者已执行的SQL不回滚。


总结

以上就是今天要讲的内容,本文仅仅简单介绍了Spring事务传播行为,而工作中的业务往往非常复杂,需要大家更加认真。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/873656.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号