栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring中的事务管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring中的事务管理

目录
    • 一、事务简介
    • 二、四大特性 (ACID)
    • 三、核心配置文件
    • 四、为什么要使用Mybatis整合Spring
    • 五、隔离级别和事务的传播行为
      • TransactionDefinition 接口中定义的隔离级别
      • TransactionDefinition 接口中定义的7种事务传播行为

一、事务简介

事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。在关系数据库中,一个事务由一组 SQL 语句组成。事务应该具有 4 个属性:原子性、一致性、隔离性、持久性。这四个属性通常成为 ACID 特性

二、四大特性 (ACID)

1. 原子性(Atomicity):事务是一个不可分割的工作单位,事务中包含许多操作,要么都做,要么都不做

2. 一致性(Consistency):事务必须使数据库从一个一致性转发太变到另一个一致性状态,事务的中间状态不能被观察到

3. 隔离性(Isolation):一个事务的执行不能被其它事务干扰。即一个事务内部的操作及使用的数据对并发的其它事务是隔离的,并发执行的各个事物之间不能互相干扰。隔离性又分为四个级别:读未提交(read uncommitted)、读已提交(read committed,解决脏读)、可重复读(repeatable read,解决虚读)、 串行执行(serializable,解决幻读)

  • 读未提交:允许另外一个事务读取到当前未提交的数据,隔离级别最低,可能导致脏读、幻读或不可重复读

  • 读已提交:被一个事务修改的数据提交后才能被另外一个事务读取,可以避免脏读,无法避免幻读、而且不可重复读

  • 可重复读:允许重复读,可避免脏读,资源消耗上升。这是MySQL数据库的默认隔离级别

  • 串行执行:也就是按照时间顺序执行多个事务,不存在并发问题,最可靠,但性能与效率最低

4. 持久性(Durability):持久性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响

为什么需要事务?

  • 如果不配置事务,可能存在数据提交不一致的情况
  • 如果不在Spring中去配置声明式事务,我们就需要在代码中手动配置事务
  • 事务在项目的开发中十分重要,设计到数据的一致性和完整性问题
三、核心配置文件

spring核心文件配置(通过横切技术实现)



    





    
    
    
        
        
        
        
        
    




    
    


四、为什么要使用Mybatis整合Spring

使用 Mybatis-Spring 的其中一个主要原因是它允许 Mybatis 参与到 Spring 的事务管理中。而不是给 MyBatis 创建一个新的专用事务管理器,MyBatis-Spring 借助了 Spring 中的 DataSourceTransactionManager 来实现事务管理

一旦配置好了 Spring 的事务管理器,你就可以在 Spring 中按你平时的方式来配置事务。并且支持@Transactional注解和 AOP 风格的配置。在事务处理期间,一个单独的 SqlSession 对象将会被创建和使用。当事务完成时,这个 session 会以合适的方式提交或回滚

事务配置好了以后,Mybatis-Spring 将会透明地管理事务。这样在你的 Dao 类中就不需要额外的代码了

五、隔离级别和事务的传播行为
TransactionDefinition 接口中定义的隔离级别
隔离级别说明
ISOLATION_DEFAULT采用当前数据库默认的事务隔离级别
ISOLATION_READ_UNCOMMITTED读未提交。允许另外一个事务读取到当前未提交的数据,隔离级别最低,可能导致脏读、幻读或不可重复读
ISOLATION_READ_COMMITTED读已提交。被一个事务修改的数据提交后才能被另外一个事务读取,可以避免脏读,无法避免幻读、而且不可重复读
ISOLATION_REPEATABLE_READ允许重复读,可避免脏读,资源消耗上升。这是MySQL数据库的默认隔离级别
REPEATABLE_SERIALIZABLE事务串行执行,也就是按照时间顺序执行多个事务,不存在并发问题,最可靠,但性能最低
TransactionDefinition 接口中定义的7种事务传播行为
事务传播行为说明
PROPAGATION_REQUIRED默认的事务传播行为。如果当前存在一个事务,则加入该事务;如果当前没有事务,则创建一个新的事务
PROPAGATION_SUPPORTS如果当前存在一个事务,则加入该事务;如果当前没有事务,则以非事务方式执行
PROPAGATION_MANDATORY当前必须存在一个事务,如果没有,就抛出异常
PROPAGATION_REQUIRES_NEW创建一个新的事务,如果当前已存在一个事务,将已存在的事务挂起
PROPAGATION_NOT_SUPPORTED不支持事务,在没有事务的情况下执行,如果当前已存在一个事务,则将已存在的事务挂起
PROPAGATION_NEVER永远不支持当前的事务,如果当前已存在一个事务,则抛出异常
PROPAGATION_NESTED如果当前存在事务,则在当前事务的一个子事务中执行
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/860391.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号