Spring的事务传播性
发布日期:2021-07-29 11:00:21 浏览次数:3 分类:技术文章

本文共 1157 字,大约阅读时间需要 3 分钟。

目录

事务的特性

  • 原子性(Atomicity):事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。
  • 一致性(Consistency):一旦事务完成(不管成功还是失败),系统必须确保它所建模的业务处于一致的状态,而不会是部分完成部分失败。在现实中的数据不应该被破坏。
  • 隔离性(Isolation):可能有许多事务会同时处理相同的数据,因此每个事务都应该与其他事务隔离开来,防止数据损坏。
  • 持久性(Durability):一旦事务完成,无论发生什么系统错误,它的结果都不应该受到影响,这样就能从任何系统崩溃中恢复过来。通常情况下,事务的结果被写到持久化存储器中。

  事务的传播性一般用在事务嵌套的场景,比如一个事务方法里面调用了另外一个事务方法,那么两个方法是各自作为独立的方法提交还是内层的事务合并到外层的事务一起提交,这就是需要事务传播机制的配置来确定怎么样执行。事务传播机制如下:

1.REQUIRED

  Spring默认的传播机制,能满足绝大部分业务需求,如果外层有事务,则当前事务加入到外层事务,一块提交,一块回滚。如果外层没有事务,新建一个事务执行

2.NOT_SUPPORTED

如果外层有事务,则加入外层事务,如果外层没有事务,则直接使用非事务方式执行。完全依赖外层的事务

3.REQUIRES_NEW

  该事务传播机制是每次都会新开启一个事务,同时把外层事务挂起,当当前事务执行完毕,恢复上层事务的执行。如果外层没有事务,执行当前新开启的事务即可

4.MANDATORY

与NEVER相反,如果外层没有事务,则抛出异常

5.NEVER

该传播机制不支持外层事务,即如果外层有事务就抛出异常

6.SUPPORTS

支持当前事务,如果当前没有事务,就以非事务方式执行。

7.NESTED

  该传播机制的特点是可以保存状态保存点,当前事务回滚到某一个点,从而避免所有的嵌套事务都回滚,即各自回滚各自的,如果子事务没有把异常吃掉,基本还是会引起全部回滚的。

NESTED 与REQUIRES_NEW的区别

  它们非常类似,都像一个嵌套事务,如果不存在一个活动的事务,都会开启一个新的事务。
  使用PROPAGATION_REQUIRES_NEW时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。两个事务不是一个真正的嵌套事务。同时它需要JTA 事务管理器的支持。
  使用NESTED时,外层事务的回滚可以引起内层事务的回滚。而内层事务的异常并不会导致外层事务的回滚,它是一个真正的嵌套事务。

事务嵌套开启一个事务,用那种传播机制?(required)

继承上一个事务(使用support)

转载地址:https://blog.csdn.net/ThreeAspects/article/details/100057649 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:BaseBasicBolt和BaseRichBolt的区别
下一篇:堆排序与PriorityQueue

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月12日 16时46分55秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章