Spring5快乐教程(十二)Spring事务管理

一、概念和准备工作

什么是事务

  定义:事务是数据库操作最基本的单元,逻辑上的一组操作,要么都成功,如果有一个操作失败则所有操作都失败

  典型场景:银行转账

  • 阿肥转账100闷给阿靓
  • 阿肥:-100  阿靓+100

事务的四个特性(ACID)

  • 原子性:操作不可分割,要么都成功,一个失败则所有操作都失败。
  • 一致性:操作前和操作后的总量不变。
  • 隔离性:多事务间操作不会互相影响。
  • 持久性:事务提交后,表中数据会发生变化。

搭建基本环境

第一步 系统分析

第二步 建表并写入记录

第三步 创建Service和Dao,并完成对象的注入关系

第四步 在dao层编写多钱和少钱的方法

第五步 编写Service层

第六步 编写测试类

二、事务场景的引入

三、事务管理介绍

  PS:事务一般添加到JavaEE三层结构里面的Service层(业务逻辑层)

  事务管理的方式:

  • 编程式事务管理
  • 声明式事务管理【常用】
    • 基于注解方式【常用】
    • 基于XML方式

  PS:在Spring中使用事务管理,底层使用AOP原理。

Spring事务管理API

  提供了一个接口PlatformTransactionManager,代表事务管理器,这个接口根据不同的ORM框架提供类不同的实现类,来实现事务操作:

编程式事务管理

  PS:详解可以参考这篇文章

声明式事务管理【xml方式】

  PS:事务方法配置部分详见这里

声明式事务管理【注解】

第一步 在Spring配置文件中配置事务管理器

第二步 在Spring配置文件中开启事务注解

声明式事务管理【完全注解开发】

四、事务管理相关参数

  我们可以在@Transactional,在这个注解里面可以配置事务的相关参数:

  • propagation事务传播行为
  • isolation事务隔离级别
  • timeout超时时间
  • readOnly是否只读
  • rollbackFor 回滚
  • noRollbackFor 不回滚

事务传播行为

  事务传播行为: 多事务方法间进行调用的过程中,事务的管理方式。

  事务方法:对数据库表数据进行变化的操作【如增、删、改 PS:查询不算】

事务传播行为分类

例子解析事务传播行为

事务隔离级别

  事务隔离级别:事务有一个特性--隔离性,多事务操作之间不会产生影响,如果不考虑隔离性的话,会产生很多问题:

  • 脏读
  • 不可重复读
  • 幻读(虚读)

  作用:为了解决上面的3个读的问题而产生。

脏读【致命问题,必须避免】

  定义:一个未提交的事务读取到另外一个未提交事务的数据。

  可能产生的问题:被读取的事务回滚时,读取到的数据就不对了。

不可重复读【现象,有时不可避免】

  定义:一个未提交的事务读取到另外一个已提交事务修改后的数据。【主要针对查询结果】

  可能产生的问题:一个事务范围内两个相同的查询却返回了不同数据。

幻读(虚读)

  定义:一个未提交的事务读取到另外一个已提交事务添加后的数据。【主要针对查询结果】

  可能产生的问题:一个事务范围内统计时可能会有问题。

隔离级别

事务超时时间

  定义:事务需要在一定时间内进行提交,如果不提交则进行回滚

  默认值:-1【永不超时】

  单位:

事务是否只读

读:查询操作。

写:添加、修改、删除操作。

默认值:false,表示可以进行查询,也可以进行增删改操作。

readOnly = true:表示只能进行查询操作

事务回滚

  设置出现哪些异常进行事务回滚。

事务不回滚

  设置出现哪些异常进行事务回滚。

posted @ 2021-02-05 11:03  有梦想的肥宅  阅读(117)  评论(0编辑  收藏  举报