spring事务传播级别

1 事物特性定义
事物最重要的两个特性,是事物的传播级别和数据隔离级别。传播级别定义的是事物的控制范围,事物隔离界别定义的是事物在数据库读写方面的控制范围。今天只写事物的传播级别。
2 事物的传播级别
2.1事物的7种传播级别
1)PROPAGATION_REQUIRED ,默认的Spring事物传播级别,使用该级别的特点是,如果上下文中已经存在事物,那么就加入到事物中执行,如果当前上下文不存在事物,则新建事物执行。所以这个级别的事物传播别介通常能满足大多数的业务场景。
2)PROPAGATION_SUPPORTS ,从字面意思就知道,supports 支持,该传播级别的特点是,如果上下文存在事物,则支持事物加入,如果没有事物,则使用非事物的方式执行。所以并非所有的包在transactionTemplate.execute中的代码都会有事物支持。这个传播级别通常是用来处理那些并非原子性的非核心业务逻辑操作。应用场景较少。
3)PROPAGATION_MANDATORY ,该级别的事物要求上下文中必须要存在事物,否则就会抛出异常!配置该方式的传播级别是有效的控制上下文调用代码遗漏事物控制的保证手段。比如一段代码不能单独被执行调用,但是一旦被调用,就必须有事物包含的情况,就可以使用这个传播级别。
4)PROPAGATION_REQUIRES_NEW ,从字面即可知道,new 每一次都要一个新事物,该传播级别的特点是,每次都会新建事物,并且上下文的事物挂机,执行当前新建事物完成以后,上下文事物回复再执行。
这是一个很有用的传播级别,比如:现在有一个发送100个红包的操作,在发送之前,要做一些系统的初始化、验证、数据记录操作,然后发送100封红包,然后再记录发送日志,发送日志要求100%的准确,如果日志不准备,整个父事物逻辑需要回滚。
怎么处理整个业务需求?就是通过这个PROPAGATION_REQUIRES_NEW级别的事物传播控制就可以完成。发送红包的子食物不会直接影响到父事物的提交和回滚。
5)PROPAGATION_NOT_SUPPORTED ,这个从字面上可知道,not supported 不支持,当前级别的特点就是上下文中存在事物,则挂起事物,执行当前逻辑,结束后回复上下文的事物。
这个事物传播级别有什么好处?可以帮助你将事物极可能的缩小。我们知道一个事物越大,它存在的风险也就越多。所以在处理事物的过程中,要保证尽可能的缩小范围。比如一段代码,是每次逻辑操作都必须要条用的,比如循环1000次的某个非核心业务逻辑操作。这样的代码如果包在事物中,势必造成事物太大,导致出现一些难以考虑周全的异常情况。所以这个事物这个级别的传播级别就派上用场了。用当前级别的事物包起来就可以了。
6)PROPAGATION_NEVER ,该事物更严格,上面的事物传播级别只是不支持,有事物就挂起,而NEVER传播级别要求上下文中不能存在事物,一旦有事物,就抛出runtime异常,强制停止执行!这个事物传播级别可以说跟事物有仇。
7)PROPAGATION_NESTED ,这个从字面可以知道,nested 嵌套级别事物。该传播级别特征是,如果上下文中存在事物,则嵌套事物执行,如果不存在事物,则新建事物。
在这里插入图片描述
2.2什么是嵌套事物?
嵌套事物是子事物套在父事物中执行,子事物是父事物的一部分,在进入子事物之前,父事物建立一个回滚点,叫save point,然后执行子事物,这个子事物的执行也算是父事物的一部分,然后子事物执行结束,父事物继续执行。重点就在于那个save point。以下两个问题点说明:
如果子事物回滚,会发生什么?
父事物会回滚到进入子事物前建立的save point,然后尝试其他的事物或者其他的业务逻辑,父事物之前的操作不会受到影响,更不会自动回滚。
如果父事物回滚,会发生什么?
父事物回滚,子事物也会跟着回滚!因为在父事物结束之前,子事物是不会提交的,子事物是父事物的一部分。

以上是事物的7个传播级别,在日常应用中,通常可以满足各种业务需求。
  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值