Spring5_事务管理

本文详细介绍了Spring5中的事务管理,包括事务的概念、ACID特性,以及事务操作前的环境搭建。重点讲解了声明式事务管理,如注解方式和XML配置方式,并阐述了事务管理的参数配置,如传播行为、隔离级别等。
摘要由CSDN通过智能技术生成

一、事务的概念

1、事务的定义
(1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操
作都失败
(2)经典场景:银行转账

  • Lily 转账 200 元 给 Rose
  • Lily 少 200,Rose多 200

2、事务四个特性(ACID)

(1)原子性(Atomicity)

原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。

(2)一致性(Consistency)

一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。举例来说,假设用户A和用户B两者的钱加起来一共是1000,那么不管A和B之间如何转账、转几次账,事务结束后两个用户的钱相加起来应该还得是1000,这就是事务的一致性。

(3)隔离性(Isolation)

隔离性是当多个用户并发访问数据库时,比如同时操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。关于事务的隔离性数据库提供了多种隔离级别,稍后会介绍到。

(4)持久性(Durability)

持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。例如我们在使用JDBC操作数据库时,在提交事务方法后,提示用户事务操作完成,当我们程序执行完成直到看到提示后,就可以认定事务已经正确提交,即使这时候数据库出现了问题,也必须要将我们的事务完全执行完成。否则的话就会造成我们虽然看到提示事务处理完毕,但是数据库因为故障而没有执行事务的重大错误。这是不允许的。

二、事务操作前的环境搭建

在这里插入图片描述
1、创建对应数据库表,添加记录
在这里插入图片描述

2、创建 service,搭建 dao,完成对象的创建和注入关系
service 注入 dao,在 dao 注入 JdbcTemplate,在 JdbcTemplate 注入 DataSource。

dao 中注入 JdbcTemplate, JdbcTemplate 注入 DataSource
在这里插入图片描述
service 中注入 dao
在这里插入图片描述
3、在 dao 创建两个方法:增加和减少钱的方法,在 service 创建转账的方法
在这里插入图片描述
在这里插入图片描述

4、上面代码,正常执行没有问题的,但若代码执行过程中出现异常,则会出现很大的问题
若转账过程中出现异常
在这里插入图片描述
则会导致转账方少了钱,而收账方又没收到钱。
使用事务可以解决上述问题。

事务的大致流程如下:
在这里插入图片描述

三、事务操作

Spring中的事务管理

1、事务添加到 JavaEE 三层结构里面 Service 层(业务逻辑层)

2、在 Spring 进行事务管理操作

有两种方式:编程式事务管理和声明式事务管理(使用)

3、声明式事务管理

(1)注解方式(使用)
(2) xml 配置文件方式

4、在 Spring 进行声明式事务管理,底层使用了 AOP 原理

5、Spring 事务管理 API
(1)提供一个接口,代表事务管理器,这个接口针对不同的框架提供不同的实现类
在这里插入图片描述

注解声明式事务管理

在这里插入图片描述

1、在 spring 配置文件配置事务管理器
在这里插入图片描述

2、在 spring 配置文件,开启事务注解
(1)在 spring 配置文件引入名称空间 tx
在这里插入图片描述
(2)在 spring 配置文件中开启事务注解
在这里插入图片描述
3、在 service 类上面(或者 service 类里面方法上面)添加事务注解

(1)@Transactional,这个注解可以添加到类上面,也可以添加方法上面

(2)若把这个注解添加类上面,则这个类里面所有的方法都被添加上事务

(3)若把这个注解添加方法上面,则为这个方法添加事务

在这里插入图片描述

声明式事务管理参数配置

1、在 service 类上面添加可以配置事务相关参数的注解@Transactional
在这里插入图片描述
2、propagation:事务的传播行为
(1)多事务方法之间的直接进行调用,在这个过程中事务 是如何进行管理的

在这里插入图片描述
(2)事务的传播行为可以由传播属性指定,Spring定义了7种传播行为,如下图
在这里插入图片描述
3、ioslation:事务隔离级别
(1)事务有特性成为隔离性,多事务操作之间不会产生影响。不考虑隔离性产生很多问题

(2)存在三个读的问题:脏读、不可重复读、虚(幻)读

  • 脏读:一个未提交事务读取到另一个未提交事务的数据
  • 不可重复读:一个未提交的事务读取到另一个提交事务修改数据
  • 虚读:一个未提交事务读取到另一提交事务添加数据

解决方式:通过设置事务隔离级别,来解决读问题
在这里插入图片描述
4、timeout:

(1)事务需要在一定时间内进行提交,否则进行回滚
(2)默认值为 -1 ,设置时间以秒单位

5、readOnly:

(1)读:查询操作,写:添加修改删除操作
(2)readOnly 默认值 false,表示可以查询,可以添加修改删除操作
(3)设置 readOnly 值是 true,设置成 true 之后,只能进行查询操作

6、rollbackFor:

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

7、noRollbackFor:

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

XML 声明式事务管理

1、在 spring 配置文件中进行配置
① 配置事务管理器
② 配置通知
③ 配置切入点和切面
在这里插入图片描述
在这里插入图片描述

完全注解声明式事务管理

使用配置类替代 xml 配置文件
在这里插入图片描述
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值