• Spring事务


    事务的基本原理

    Spring事务的本质其实就是数据库对事务的支持,使用JDBC的事务管理机制,就是利用java.sql.Connection对象完成对事务的提交,那在没有Spring帮我们管理事务之前,我们要怎么做。

    Connection conn = DriverManager.getConnection();
    try {  
        conn.setAutoCommit(false);  //将自动提交设置为false                         
        执行CRUD操作 
        conn.commit();      //当两个操作成功后手动提交  
    } catch (Exception e) {  
        conn.rollback();    //一旦其中一个操作出错都将回滚,所有操作都不成功
        e.printStackTrace();  
    } finally {
        conn.colse();
    }

    事务是一系列的动作,一旦其中有一个动作出现错误,必须全部回滚,系统将事务中对数据库的所有已完成的操作全部撤消,滚回到事务开始的状态,避免出现由于数据不一致而导致的接下来一系列的错误。事务的出现是为了确保数据的完整性和一致性,

    在目前企业级应用开发中,事务管理是必不可少的事务有四大特性(ACID)

    1.原子性(Atomicity)事务是一个原子操作,由一系列动作组成。事务的原子性确保动作要么全部完成,要么完全不起作用。

    2.一致性(Consistency)事务在完成时,必须是所有的数据都保持一致状态。

    3.隔离性(Isolation)并发事务执行之间无影响,在一个事务内部的操作对其他事务是不产生影响,这需要事务隔离级别来指定隔离性。

    4.持久性(Durability)一旦事务完成,数据库的改变必须是持久化的。

    在企业级应用中,多用户访问数据库是常见的场景,这就是所谓的事务的并发。事务并发所可能存在的问题:
    1.脏读:一个事务读到另一个事务未提交的更新数据。
    2.不可重复读:一个事务两次读同一行数据,可是这两次读到的数据不一样。
    3.幻读:一个事务执行两次查询,但第二次查询比第一次查询多出了一些数据行。
    4.丢失更新:撤消一个事务时,把其它事务已提交的更新的数据覆盖了。

    Spring事务的隔离级别

    名称解释
    ISOLATION_DEFAULT -1 这是一个PlatfromTransactionManager默认的隔离级别,使用数据库默认的事务隔离级别。另外四个与JDBC的隔离级别相对应
    ISOLATION_READ_UNCOMMITTED 1 这是事务最低的隔离级别,它充许另外一个事务可以看到这个事务未提交的数据。这种隔离级别会产生脏读,不可重复读和幻读。
    ISOLATION_READ_COMMITTED 2 保证一个事务修改的数据提交后才能被另外一个事务读取。另外一个事务不能读取该事务未提交的数据。
    ISOLATION_REPEATABLE_READ 4 这种事务隔离级别可以防止脏读,不可重复读。但是可能出现幻读。
    ISOLATION_SERIALIZABLE 8

    这是花费最高代价但是最可靠的事务隔离级别。事务被处理为顺序执行。除了防止脏读,不可重复读外,还避免了幻读。

    声明式事务管理

    声明式事务管理有两种常用的方式,一种是基于tx和aop命名空间的xml配置文件,一种是基于@Transactional注解。
    1.基于tx和aop命名空间的xml配置文件
    配置文件

        <tx:advice id="advice" transaction-manager="transactionManager">
            <tx:attributes>
                <tx:method name="insert" propagation="REQUIRED" read-only="false"  rollback-for="Exception"/>
            </tx:attributes>
        </tx:advice>
    
        <aop:config>
            <aop:pointcut id="pointCut" expression="execution (* com.gray.service.*.*(..))"/>
            <aop:advisor advice-ref="advice" pointcut-ref="pointCut"/>
        </aop:config>

    人这辈子没法做太多事情,所以每做一件事都要做到精彩绝伦。 因为,这就是我的宿命。人生苦短,你明白吗? 所以这是我为人生做出的选择
  • 相关阅读:
    技术期刊 · 白日照耀开鸿蒙 | 深入鸿蒙 ACE UI 框架解析;无限循环的 useEffect 类型;用 Three.js 实现 3D 房间;图神经网络入门;超基础的机器学习入门-原理篇
    青岛敏捷之旅,来了!
    痞子衡嵌入式:借助Serial Plot软件测量i.MXRT系列FlexSPI驱动Flash页编程执行时间分布
    痞子衡嵌入式:超级下载算法RT-UFL v1.0在Segger Ozone下的使用
    痞子衡嵌入式:超级下载算法RT-UFL v1.0在Keil MDK下的使用
    痞子衡嵌入式:超级下载算法RT-UFL v1.0在IAR EW for Arm下的使用
    痞子衡嵌入式:超级下载算法RT-UFL v1.0在MCUXpresso IDE下的使用
    《痞子衡嵌入式半月刊》 第 42 期
    痞子衡嵌入式:i.MXRT全系列下FlexSPI外设AHB Master ID定义与AHB RX Buffer指定的异同
    CDP客户数据管理平台体系化搭建
  • 原文地址:https://www.cnblogs.com/junjun1578/p/9111793.html
Copyright © 2020-2023  润新知