您的位置:首页 > 编程语言 > Java开发

Spring学习之事务管理基础

2017-07-15 15:07 176 查看

Spring学习之事务管理基础

数据库事务相关概念

事务的定义

事务,一般指的是数据库事务,是指数据库操作的时候,多个执行语句之间是一个逻辑上的整体,也就是说,这些操作之间要么都执行,要么就都不执行

事务的特性

事务有四大特性:分别是原子性(Atomic)、一致性(Consistency)、隔离性(Isolation)、持久性(Durabily),简称 ACID

原子性:原子性指的是组成事务的各个操作是一个整体,也就是一个原子单元,不可分割

一致性:一致性指的是事务执行前后,系统的状态应该处于一致的情况,比如说转账事务,转账前后两个账号的金额总和应当保持一致

隔离性:隔离性是指在并发操作数据库的时候,不同的事务之间拥有不同的数据空间,不会被其他事务干扰,根据不同的需要,有不同的隔离级别

持久性:持久性是指一旦事务提交了,那么在逻辑上来说,数据就应当是被持久化了,此时即使发生故障或者其他原因,可以通过日志等其他手段进行恢复

事务的四个特性之间是有着必然的关系的,一致性是最终的目的,原子性、隔离性以及持久性是为了保证一致性而进行的必要条件

没有进行隔离会出现的问题

如果事务的执行过程中没有进行相应的隔离,那么在事务并发操作的时候,会出现读写问题(三类读问题,两类丢失更新问题)

三类读问题

脏读:脏读是指事务A读取到事务B还没有提交的数据,此时如果事务B进行回滚,则导致事务A所读取到的数据是无效的

不可重复读:不可重复读是指事务A第一次读取之后,事务B修改了数据,并且进行了提交,此时事务A进行第二次读取,发现前后读取的数据不一致(注意这里是指修改数据而不是增加或者删除数据,属于行级别)

幻象读:幻象读是指事务A第一次读取之后,事务B增加或者减少了数据记录,并且进行了提交,此时事务A进行第二次读取,发现前后读取的数据记录不一致(注意这里指的是增加或者减少数据记录而不是修改数据本身,属于表级别)

两类更新问题

第一类丢失更新问题:事务A回滚时,把事务B已经更新并且提交的数据撤销了,导致事务B所做的操作失效

第二类丢失更新问题:事务A提交时,把事务B已经更新并且提交的数据覆盖了,导致事务B所做的操作失效

数据库锁机制

按照对象区分:行级锁、表级锁

并发事务锁定的关系:共享锁、独占锁

共享锁会防止独占锁,但允许其他共享锁,但是独占锁两者都不允许

事务隔离级别

一般来说,由于手动对事务的并发进行控制是非常难的事情,所以一般的数据库都提供了相应的自动锁机制,使用者只需要指定对应的事务隔离级别

四种隔离级别

READ_UNCOMMIT

READ_COMMIT

REPEATABLE_READ

SERIALIZABLE

四种隔离级别对应含义以及范围如下所示



数据库的隔离级别越高,对应的并发性能就越低,所以在选择的时候需要兼顾两者,一般采用的级别为REPEATABLE_READ也就是可重复读级别

Spring事务管理(Service Provider Interface)

Spring为事务管理定义了三个主要接口

PlatformTranscationManager:根据TransactionDefinition提供的事务属性配置信息创建事务,并使用TranscationStatus描述事务的状态

操作方法:getTransaction、commit、rollback

实现类:JpaTransactionManager、HibernateTransactionManger、DataSourceTransactionmanager、JdoTranscationManager、JtaTransactionManager

TransactionDefinition:描述 隔离级别、超时时间、是否为只读事务以及事务的传播规则

事务隔离级别

ISOLATION_DEFAULT:采用底层数据库默认的隔离级别

ISOLATION_READ_UNCOMMIT

ISOLATION_READ_COMMIT

ISOLATION_REPEATABLE_READ

ISOLATION_SERIALIZABLE

TransactionStatus: 代表一个事务的具体运行状态

SavePointMange:createSavePoint、rollbackToSavepoint、releaseSavePoint

方法:hasSavepoint、isNewTransaction、isCompleted、isRollbackOnly、setRollbackOnly

Spring配置事务管理的主要步骤

配置数据源

配置事务管理器,并且指定其他的事务控制属性

将数据源注入到事务管理器中,将事务管理交给Spring

事务传播行为

产生事务传播行为原因:一般情况是,事务管理是配置在Service层中,一般同一个方法处于同一个一个事务中,但是如果此时在一个Service的方法中调用另外一个Service中的方法的时候,就会出现两个事务交叉的情况,此时有不同的处理方式



总结

本小节主要学习了事务管理的基本概念、事务的四大特性以及事务的传播行为,接下来将学习如何使用Spring进行事务管理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息