Spring笔记5(事务管理)

Spring事务管理

1、 事务概念

事务是对数据库操作的最基本的单元,一组操作数据,要么都成功,要么都失败。
例:小明账户1000元,小红账户500元,小明给小红转账100,小明账户减少100元,(断电)小红增加100元。

2、 事务特性(ACID):原子性、一致性、隔离性、持久性

原子性(atomic):事务是一个原子操作,由一系列动作组成,事务的原子性确保动作要么都完成,要么都不完成。
一致性(consistency):一旦事务完成(不管成功或失败),系统必须保证业务一致的,而不是部分成功,部分失败,现实中的数据不能被破坏。
隔离性(isolation):有多个事务处理相同的数据,每个事务都应该与其他事务隔离开来,防止数据被破坏。
持久性(durability):一旦事务处理完成,无论发生什么系统错误,结果都不应该受到影响。

3、 spring事务管理的两种方式:

1) 编程式事务管理
2) 声明式事务管理(不用代码实现)
3) 注解实现声明式事务管理(转账)
a) 创建账户表
在这里插入图片描述

b) 创建项目,导入相关的jar包,添加service、dao、entity
在这里插入图片描述

c) 配置文件:
配置注解扫描
在这里插入图片描述

配置c3p0连接池和jdbcTemplate
在这里插入图片描述

d)编写转账功能

配置事务管理器
在这里插入图片描述

配置tx名称空间
在这里插入图片描述

开启事务扫描

在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述

事务本质建立在aop,在方法前后进行拦截,在目标方法执行完成之后根据执行的情况进行提交或回滚

4、 事务的属性分析

1)事务的传播机制
一般用在事务嵌套的场景中,例如一个事务方法调用了另一个事务方法,这两个方法是作为各自独立的方法提交,还是内层合并到外层一起提交,这个事务的传播机制来配置。
在这里插入图片描述

2)事务的隔离级别
事务的隔离级别定义了若干个事物之间的隔离程度,一个事务能受其他并发动作影响的程度。
多个事务并发操作可能会导致的问题:
a) 脏读:一个事务读取了另一个事务改写但未提交的数据,如果此时这些数据回滚了,那么第一个事务读取的数据就无效了。
小华(1000)给小明(0) 小华扣钱(1000) 小明加钱(100) commit/rollback
读取小华金额:900
B)不可重复读(重点在更改)
发生在一个事务执行相同的查询两次或以上,但每次查询结果都不相同时,这通常是由于另一个并发事务在两次查询之间更改了数据
T:小华(1000) 小华(1000)
C)幻读:(重点在新增和删除)
与不可重复读类似,当一个事务读取了几行数据之后,另一个并发实物插入了一些记录,第一个事务就会查出一些额外记录

根据不同的业务场景选择不同的隔离级别:
在这里插入图片描述

3) 只读

当对事务性资源进行了只读操作,事务性资源指的是被事务管理的资源。
如果确定对事务性资源进行只读操作,那么我们可以将事务标志为可读的,可以提高事务的处理性能。
4) 事务的回滚机制
默认情况下,事务只在运行时异常回滚,受检查异常不会滚。我们可以设置声明事务出现特定的异常不回滚,即使他是运行时异常。
5) 事务超时

为了使应用程序很好的执行,事务不能运行太长时间。加入事务运行时间过长,导致数据库锁定。所以如果事务长时间占用数据库资源,我们声明事务在等待数秒后自动回滚,不必等他结束

6) 事务属性配置
设置传播机制
@Transactional(propagation=Propagation.REQUIRED)
设置隔离级别
@Transactional(readOnly=true) 设置只读
@Transactional(readOnly=false) 设置可读写,默认false
设置事务超时时间
@Transactional(timeout=30) 单位秒
设置异常回滚
@Transactional(rollbackFor=RuntimeException.class)单一异常
Transactional(rollbackFor={RuntimeException.class,NullPointerException.class})多个异常

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值