美文网首页java面试java面试
5.1简介-第5章Spring事务

5.1简介-第5章Spring事务

作者: 努力学习的lfk | 来源:发表于2021-08-23 08:47 被阅读0次

    spring的事务处理

    1.什么是事务:
    事务时一组sql语句的集合,集合中有多条sql语句(insert、update、select、delete)。我们希望这些sql语句都能成功,或者都能失败。这些sql语句的执行是一致的,作为一个整体执行。

    2.什么时候使用事务:
    当操作涉及到多个表或者多个sql语句(insert、update、select、delete),需要保证这些语句都成功(或都失败)时。

    在java代码中,事务应放在哪?
    放在service接口的实现类的业务方法上(因为该业务方法可能会涉及到多个dao的调用)。

    3.通常使用jdbc访问数据库,还有mybatis访问数据库,如何处理事务?
    jdbc访问数据库:
    Connection conn;
    conn.commit();
    conn.rollback();

    mybatis访问数据库:
    SqlSession.commit();
    SqlSession.rollback();

    hibernate访问数据库:
    Session.commit();
    Session.rollback();

    4.第3问中事务的处理方式,有哪些不足之处?
    1)不同的数据库访问技术,处理事务的对象方法不同。需要去了解不同数据库访问技术使用事务的原理。
    2)掌握多种数据库中事务的处理逻辑(什么时候提交、回滚事务)。
    3)需要了解处理事务的多种方法
    总结:多种数据库的访问技术有不同的事务处理机制、对象、方法。

    5.如何解决不足。
    spring提供了一种处理事务的统一模型,能使用统一步骤(方式)来完成多种不同数据库访问技术的事务处理。


    (声明式事务:把事务相关资源和内容提供给spring,spring就能处理事务、提交回滚。几乎不用写代码)

    6.处理事务,需要做什么,以及怎么做。
    spring处理事务的模式,其使用步骤都是固定的:
    1)使用事务管理器对象,代替完成commit、rollback。
    事务管理器是PlatformTransactionManager接口对象。其主要用于完成事务的提交、回滚,及获取事务的状态信息。

    实现类:spring把每一种数据库访问计数对应的事务处理类都创建好了。
    如:
    mybatis访问数据库——spring创建了DataSourceTransactionManager
    hibernate访问数据库——spring创建的是HibernateTransactionManager

    如何使用:需要声明数据库访问计数对应的事务管理器实现类,即在spring的配置文件中使用<bean>声明。
    例如:使用mybatis数据库,应在配置文件中
    <bean id="自定义" class="...DataSourceTransactionManager">

    2)说明需要事务的类型
    事务定义接口TransactionDefinition中定义了事务描述相关的三类常量:事务隔离级别、事务传播行为、事务默认超时时限,及对它们的操作。

    ①事务的五个隔离级别
    这些常量均是以ISOLATION_开头。即形如ISOLATION_×××。

    • DEFAULT:采用DB默认的事务隔离级别。MySQL默认为REPEATABLE_READ;Oracle默认为READ_COMMITED。
    • READ_UNCOMMITTED:读未提交。未解决任何并发问题。
    • READ_COMMITED:读已提交。解决藏独,存在不可重复读与幻读。
    • REPEATABLE_READ:可重复度。解决藏独、不可重复读,存在幻读。
    • SERLALIZABLE:串行化。不存在并发问题,最高的事务隔离级别,不管多少事务,挨个运行完一个事务的。

    ②事务的七个传播行为
    所谓事务传播行为是指,处于不同事务中的方法在相互调用时,执行期间事务的维护情况。如:A事务中的方法doSome()调用B事务中的方法doOther(),在调用执行期间事务的维护情况,就成为事务传播行为。事务传播行为是加在方法上的。
    事务传播行为常量都是以PROPAGATION_开头,形如PROPAGATION_×××。

    PROPAGATION_REQUIRED(掌握)
    指定的方法必须在事务内执行。若当前存在事务就加入到当前事务中;若当前没有事务,则创建一个新事物。这种传播行为是最常见的选择,也是sprig默认的事务传播行为。

    PROPAGATION_REQUIRES_NEW(掌握)
    总是新建一个事务,若当前存在事务,就将当前事务挂起,直到新事务执行完毕。

    PROPAGATION_SUPPORTS(掌握)
    指定的方法支持当前事务,但若当前没有事务,也可以以非事务方式执行(查询操作,有无事务都可)。

    PROPAGATION_MANDATORY
    PROPAGATION_NESTED
    PROPAGATION_NEVER
    PROPAGATION_NOT_SUPPORTED

    ③事务默认超时时限
    表示一个方法最长的执行时间,如果方法执行时超过了时间,事务就回滚。单位秒,整数值,默认-1.

    3)事务提交事务、回滚事务的时机
    ①当业务方法执行成功,无异常抛出,spring会在方法执行完毕后自动提交事务(调用事务管理器的commit)。

    ②当业务方法抛出运行时异常或ERROR,spring自动执行回滚(调用事务管理器的rollback)。
    运行时异常的定义:RuntimeException和它的子类都是运行时异常,例如NullPointException、NumberFormatExcept。

    ③当业务方法抛出非运行时异常(主要是受查异常时),提交事务。
    受查异常的定义:在写代码时,必须处理的异常。例如IOException、SQLException。

    总结spring的事务

    1.管理事务的是 事务管理器和其实现类
    2.spring的事务是一个统一模型
    1)使用<bean>指定使用的事务管理器实现类
    2)指定哪些类、哪些方法需要加入事务的功能
    3)指定方法需要的隔离级别、传播行为、超时时限


    笔记来源:B站动力节点 spring学习视频

    视频链接:https://www.bilibili.com/video/BV1nz4y1d7uy

    相关文章

      网友评论

        本文标题:5.1简介-第5章Spring事务

        本文链接:https://www.haomeiwen.com/subject/tmjxvltx.html