Spring事务管理

事务的概念

首先来回顾一下什么是事务?
事务指的是逻辑上的一组操作,这组操作要么全部成功,要么全部失败。
举个例子,假设张三和李四两人之间要进行转账操作----张三要给李四转账1000元。那么这个转账操作就有下面两个步骤:
①修改张三账户,扣除1000元②修改李四账户,增加1000元。
显然在这个过程中,不允许出现步骤①完成后整个操作就终止的情况。要想让这两个步骤能一起完成或一起失败的话,就要对其加上事务管理。

事务的特性

事务有如下4个特性:原子性、一致性、隔离性、永久性。
①原子性指事务是一个不可分割的基本单位,一组操作要么都发生,要么都不发生。
②一致性指事务完成前后的数据要保持一致,比如转账操作中事务完成前后的总钱数不能发生改变。
③隔离性指多个用户并发访问时,每一个事务都是相互独立的,不能被其他事务所干扰。
④永久性指事务一旦被提交,就真正的被修改了,无法改变撤回。

Spring事务接口

Sring事务管理主要提供了三个接口:
①事务管理器 PlatformTransactionManager
②事务定义信息 TransactionDefinition
③事务运行状态 TransactionStatus

简单的写一下这三种接口的功能:
1)PlatformTransactionManager
Spring在该接口中为不同的持久化框架提供了不同的PlatformTransactionManager接口实现类,事务的提交、回滚等操作全部交给它来实现。

2)TransactionDefication
该接口中定义了一些事务的隔离级别、超时信息、传播行为等常量和方法。
之所以要定义隔离级别是因为如果不考虑事务的隔离性,就可能会引发一系列安全问题,比如脏读,不可重复读,幻读等。
(脏读指一个事务读取了另一个事务改写了但还未提交的数据时,此时如果这些数据被回滚了,则读到的数据就会是无效的。
不可重复读是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。幻读指的是一个事务读取了几行记录之后,另一个事务插入了一些记录,此时幻读就发生了)

隔离级别就是用来解决上面几种问题的。

Spring为事务提供了四种隔离级别:

 


此外该接口中还定义了Spring事务的传播行为。传播行为是用来解决业务层中多个方法之间的相互调用的问题,用来决定事务是如何进行传递的。

有七种传播行为:

 

3)TransactionStatus
事务状态的接口,该接口中提供了一组方法,可以获得事物的状态信息,比如事务是否开启,事务是否已完成,是否为一个新事物等等。

事务管理方式

Spring支持两种方式管理事务
①编程式的事务管理
该方式是要手动来写代码进行事务管理,较少使用。
②使用xml配置的声明式事务
Spring的声明式事务是通过AOP来实现的,开发中推荐使用此种方式,代码的侵入性较小。



微信公众号【IT资源社】
本公众号致力于免费分享全网最优秀的视频资源,学习资料,面试经验等,前端,PHP,JAVA,算法,Python,大数据等等,你想要的这都有,还会分享优质博文,提高你的认知与思维

IT资源社-QQ交流群:601357554
要进微信交流群的话加微信:super1319164238
微信搜索公众号:ITziyuanshe 或者扫描下方二维码直接关注,

 
原文地址:https://www.cnblogs.com/Lovebugs/p/8782922.html