Spring——Spring事务的实现方式及传播特性

这篇具有很好参考价值的文章主要介绍了Spring——Spring事务的实现方式及传播特性。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • Spring事务的特性及隔离级别同事务,详情请见事务——什么是事务,事务的特性,事务的隔离级别_醉酒的戈多的博客-CSDN博客

一、Spring事务的实现方式及原理

1.实现方式

在使用Spring框架的时候,有以下两种事务的实现方式:

  1. 编程式事务:用户自己通过代码来控制事务的处理逻辑
  2. 声明式事务:通过@Transactional注解来实现

​        事务的操作本来应该是由数据库来进行控制,但是为了方便用户进行业务逻辑的操作,spring对事务功能进行了扩展实现,一般很少会用编程式事务,更多的是通过添加@Transactional注解来进行实现,当添加此注解之后事务的自动功能就会关闭,有spring框架来帮助进行控制。

2.实现原理

        Spring的事务操作是AOP的一个核心体现,当一个方法添加@Transactional注解之后,spring会基于这个类生成一个代理对象,会将这个代理对象作为bean,当使用这个代理对象的方法的时候,如果有事务处理,那么会先把事务的自动提交给关系,然后去执行具体的业务逻辑,如果执行逻辑没有出现异常,那么代理逻辑就会直接提交,如果出现任何异常情况,那么直接进行回滚操作,当然用户可以控制对哪些异常进行回滚操作。

二、Spring事务的传播特性

        当使用@Transactional注解实现事务时,且多个事务方法相互调用时,事务如何在这些方法之间进行传播。spring中提供了7中不同的传播特性,来保证事务的正常执行。具体使用方式如下:

@Transactional(propagation = Propagation.REQUIRED)
public int saveUser(User user){
    scoreDao.save(**);
    return userDao.save(user);
}

Spring事务的7中传播特性: 

  • ​ REQUIRED:默认的传播特性,如果当前没有事务,则新建一个事务,如果当前存在事务,则加入这个事务

方法A中调用方法B,B方法的事务传播设置为PROPAGATION_REQUIRED,则如果A方法上有事务,B就用A的事务,没有的话,B就自己新建一个事务。

  • ​ SUPPORTS:当前存在事务,则加入当前事务,如果当前没有事务,则以非事务的方式执行

方法A中调用方法B,B方法的事务传播设置为PROPAGATION_SUPPORTS,则如果A方法上有事务,B就用A的事务,没有的话,B就以非事务方式执行。

  • ​ MANDATORY:当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常

方法A中调用方法B,B方法的事务传播设置为PROPAGATION_MANDATORY,则要求A方法上有事务,有的话,B用A的事务。A没有的话,就报错。

  • ​ REQUIRED_NEW:创建一个新事务,如果存在当前事务,则挂起该事务

方法A中调用方法B,B方法的事务传播设置为PROPAGATION_REQUIRES_NEW,则如果A方法上有事务,则将A方法的事务挂起,B用自己的事务。A方法没有事务的话,B自己就新建一个事务。

  • ​ NOT_SUPPORTED:以非事务方式执行,如果存在当前事务,则挂起当前事务

方法A中调用方法B,B方法的事务传播设置为PROPAGATION_NOT_SUPPORTED,则如果A方法上有事务,则将A方法的事务挂起(因为A、B方法是在同一个线程中执行的)以非事务方式执行,以非事务方式执行。A没有事务,就以非事务方式执行。

  • ​ NEVER:不使用事务,如果当前事务存在,则抛出异常

方法A中调用方法B,B方法的事务传播设置为PROPAGATION_NEVER,则要求A方法上不能有事务,有的话,就报错。A没有事务,就以非事务方式执行,B始终是以非事务方式执行。

  • ​ NESTED:如果当前事务存在,则在嵌套事务中执行,否则REQUIRED的操作一样

方法A中调用方法B,B方法的事务传播设置为PROPAGATION_NESTED,则如果A方法上有事务,则B方法的事务嵌套在A方法事务中。A方法没有事务的话,B自己就新建一个事务。

 NESTED与REQUIRED和REQUIRED_NEW的区别如下:

​ NESTED和REQUIRED_NEW的区别:

​ REQUIRED_NEW是新建一个事务并且新开始的这个事务与原有事务无关,而NESTED则是当前存在事务时会开启一个嵌套事务,在NESTED情况下,父事务回滚时,子事务也会回滚,而REQUIRED_NEW情况下,原有事务回滚,不会影响新开启的事务

​ NESTED和REQUIRED的区别:

​ REQUIRED情况下,调用方存在事务时,则被调用方和调用方使用同一个事务,那么被调用方出现异常时,由于共用一个事务,所以无论是否catch异常,事务都会回滚,而在NESTED情况下,被调用方发生异常时,调用方可以catch其异常,这样只有子事务回滚,父事务不会回滚。文章来源地址https://www.toymoban.com/news/detail-649372.html

到了这里,关于Spring——Spring事务的实现方式及传播特性的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring 事务和事务传播机制

    目录 🐇今日良言:生命只有一次,你要活的畅快淋漓 🐇一、Sping 事务 1.Spring 中事务的实现 2.Spring 中事务隔离级别 🐇二、Spring 事务传播机制 1.基本概念 2.详细介绍 1.Spring 中事务的实现 在MySQL中也有事务,如下链接是博主之前写的关于MySQL事务的博客: 如何理解数据库事务

    2024年02月07日
    浏览(29)
  • Spring事务和事务传播机制(1)

    ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring + Spring MVC + MyBatis_冷兮雪的博客-CSDN博客 在Spring框架中,事务管理是一种用于维护数据库操作的一致性和完整性的机制。Spring事务管理提供了灵活的方式来处理事务,包括事务的创建

    2024年02月12日
    浏览(26)
  • Spring—事务及事务的传播机制

    将一组操作封装成一个执行单元, 即这一组操作一同成功 / 一同失败 举个栗子🌰 未使用事务 滑稽老哥给女神转账 520 由于某种原因, 女神并未收到转账的 520, 而滑稽老哥却被扣款 520 使用事务 滑稽老哥给女神转账 520 由于某种原因, 女神并未收到转账的 520 因为使用事务, 所以

    2024年02月13日
    浏览(36)
  • 【Spring】深入理解 Spring 事务及其传播机制

    在 Spring 框架中,事务(Transaction)是一种用于管理数据库操作的机制,旨在 确保数据的 一致性、可靠性和完整性 。事务可以将一组数据库操作(如插入、更新、删除等)视为一个单独的执行单元,要么 全部成功地执行,要么全部回滚 。这样可以确保数据库在任何时候都保

    2024年02月12日
    浏览(48)
  • Spring Boot 事务和事务传播机制

    事务定义 将一组操作封装成一个执行单元 (封装到一起),这一组的执行具备原子性, 那么就要么全部成功,要么全部失败. 为什么要用事务? 比如转账分为两个操作: 第一步操作:A 账户-100 元。 第二步操作:B账户 +100 元。 如果没有事务,第一步执行成功了,第二步执行失败了,

    2024年02月11日
    浏览(28)
  • Spring事务传播机制

    编程式事务管理:通过  TransactionTemplate 或者 TransactionManager 手动管理事务,实际应用中很少使用,这不是本文的重点,就不在这里赘述。 声明式事务管理:使用场景最多,也是最推荐使用的方式,直接加上@Transactional注解即可。 @Transactional 注解是用于声明事务性方法的注解

    2024年01月16日
    浏览(28)
  • Spring事务传播机制解析

    在Java的Spring框架中,事务管理是保证应用数据一致性和可靠性的关键。Spring提供了灵活的事务传播机制,它定义了事务边界,以及在嵌套方法调用时如何处理事务。本文旨在深入探讨Spring的事务传播行为,帮助开发者更好地理解和运用这一重要特性。 事务传播机制指的是在

    2024年01月16日
    浏览(29)
  • spring的事务传播机制

    嫌弃内容代码复杂的可直接看思维导图大纲即可 指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行 默认,当前存在事务,则加入该事务;不存在事务,创建新事务。 始终以新的事务运行,当前存在事务,则挂起原事务;不存在事务,创建新事务

    2023年04月23日
    浏览(42)
  • 【JavaEE进阶】Spring事务和事务传播机制

    Spring 事务是 Spring 框架提供的一种机制,用于 管理数据库操作或其他资源的一组相关操作 ,以确保它们在一个原子、一致、可靠和隔离的执行单元内进行。事务用于维护数据的完整性并支持并发访问数据库时的数据一致性。 Spring 事务的主要特点包括: 原子性(Atomicity):

    2024年02月09日
    浏览(53)
  • 一文详解Spring事务传播机制

    目录 背景 Spring事务 @Transactional注解 使用场景 失效场景 原理 常用参数 注意 事务传播机制 处理嵌套事务流程 主事务为REQUIRED子事务为REQUIRED 主事务为REQUIRED子事务为REQUIRES_NEW 主事务为REQUIRED子事务为NESTED 实现方式 源码解析 我们在使用Spring管理数据库事务的时候很方便,只

    2023年04月26日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包