Spring中事务控制的一组API

事务控制

JavaEE 体系进行分层开发,事务控制和处理处于业务层

         如果想要在业务层进行事务控制有两种方法:

1.可以通过自己编写事务控制类既编码方式实现
2.也可以通过Spring为我们提供的事务控制接口实现事务控制(通过配置文件或者注解的方式)

Spring中事务控制( Spring中事务控制的API)

Spring为我们提供了一组事务控制的接口,这组接口是在spring-tx.5.0.2.RELESE.jar中,Spring的事务控制都是基于AOP的,它既可以使用编程的方式实现,也可以使用配置的方式实现。

PlateformTransactionManager接口

PlateformTransactionManager接口 :此接口是spring的事务管理器,它里面提供了我们常用的操作事务的方法
(类似于编程方式实现事务控制中的TransactionManager类(我自己写的,如果是别人写名字不一定是这个),如果是编程实现,那么就需要把这个类的对象的创建交给spring 容器,类似于通知类,但是这个PlateformTransationManager 是个接口 )
在这里插入图片描述
PlateformTransactionManager接口中的方法:

获取事务状态的信息:
		TransactionStatus getTransation(TransactionDefinition definition)

提交事务:
		void commit(TransactionStatus status):

回滚事务:
		void rollblack(TransactionStatus status)

在Spring的实际开发中,我们都是使用它的实现类 DataSourceTrabsationManager

TransationDefinition :事务的定义信息对象

1.并发 事务处理带来的问题

并发事务处理可以大大的提高数据库系统资源的利用率,提高数据库系统事务的吞吐量,从而支持更多的用户,但是并发处理也会带来一些问题

主要包括一下情况:

脏读:一个事务读取到另一个事务尚未提交的数据
不可重复读:一个事务读取某些数据后的一段时间,再次读取以前读过的数据,却发现读过的数据发生了改变或者数据已经被删除
幻读:一个事务按照相同的检索条件重新读取以前 检索过的数据,却发现其他事务插入了满足其拆查询条件的新数据

2.事务的隔离级别

“脏读”、“不可重复读”、“幻读”其实都是数据库一致性的问题,为了解决这种情况,,需要数据库提供一定的事务隔离机制来解决,
数据库事务的4种隔离级别:
由低到高分别为
1.Read uncommitted (读未提交) :一个事务可以读取到另一个事务未提交的数据
2. Read committed (读提交):一个事务要等另一个事务提交后才能读数据
3.Repeatable read (重复读):开始读数据(开启事务)时,不允许修改数据
4.Serializable :Serializable 是最高的事务隔离级别,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。

在这里插入图片描述

获取事务对象的名称:	
			String getName()
			
获取事务隔离级别:
			int getIsolationLevel()
			
获取事务传播行为:
			int getPropagtionBehavior()//什么时候可以有事务,什么时候可有可没有事务(如增删改必须有事务,查询可有可无)
			
获取事务超时时间:
			int getTimeout()//当提交或者回滚事务多长时间就过期了 -1表示永远不过期
			
获取事务是否只读:
		boolean isReadOnly()//查询的时候只读
		
		

3.事务的传播行为
REQUIRED:如果当前没有事务,就创建一个事务,如果已经 存在一个事务中,加入到这个事务。一般的选择(增删改的选择。默认值)

SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式运行,(没有事务。查询的选择)

TransationStatus:此接口提供的是事务具体的运行状态

刷新事务:
void flush()

获取是否存在存储点:(事务按步提交,每个存储点就是事务的一步,当执行成功之后就是提交这一步,所有步骤都成功整个事务结束,如果在某一步没有成功,那回滚的时候只会滚到当前这一步,而不是回滚到所有存储点的最开始)
boolean hasSavepoint()

获取事务是否完成:
boolean isCompleted()

获取事务是否为新的事务:
boolean isNewTransation()

获取事务是否回滚:
boolean isRollbackOnly()

设置事务回滚:
void setRollbackOnly()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值