java spring 事务控制器_spring之事务总结

事务定义

事务(transaction),一般是指要做的或者所做的事情。在程序中,尤其是在操作数据库的程序中,指的是访问并且可能更新数据库中数据项的一个执行单元(unit),这个执行单元由事务开始(begin transaction)和事务结束(end transaction)之间执行的全部操作组成。

事务特性(ACID原则)【记住】

事务具有4个基本特性:原子性、一致性、隔离性、持久性。也就是我们常说的ACID原则。

原子性(Atomicity):一个事务已经是一个不可再分割的工作单位。事务中的全部操作要么都做;要么都不做。

一致性(Consistency):事务必须是使得数据库状态从一个一致性状态,转变到另外一个一致性状态。也就是说在事务前,和事务后,被操作的目标资源状态一致。比如银行转账案例中,转账前和转账后,总账不变。

隔离性(Isolation):一个事务的执行不能被其他事务的影响。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,多个并发事务之间不能相互干扰。

持久性(Durability):一个事务一旦提交,它对数据库中数据的改变会永久存储起来。其他操作不会对它产生影响。

spring事务控制中需要明确的事项

第一件事

j2EE体系中项目按照分层进行设计开发,有表现层、业务层、持久层。事务处理位于业务层。spring提供了分层设计业务层的事务处理解决方案。

1bef8c4b7e047bb249dd2038d1df6a9d.png

第二件事

spring框架为我们提供了一组事务控制接口,该组接口位于spring-tx-xxx.RELEASE.jar包中

第三件事

spring的事务都是基于AOP的实现,它既可以使用编程的方式实现,也可以使用配置的方式实现。我们这里重点是使用配置的方式来实现。

spring事务控制器的API介绍

1.PlatformTransactionManager

2.TransactionDefinition

事务隔离级别 【理解】

说明:事务隔离级别,反应了事务在并发访问时的处理态度。

ISOLATION_DEFAULT:

默认级别,归属于下列某一种隔离级别。在项目中使用默认值即可。

ISOLATION_READ_UNCOMMITTED:

可以读取其他事务未提交的数据(脏读)

ISOLATION_READ_COMMITTED:

只读取其他事务已经提交的数据,解决脏读的问题。有可能两次读取不一致的问题,不可重复读(oracle数据库默认级别)

ISOLATION_REPEATABLE_READ:

是否读取其他事务提交修改后的数据,解决不可重复读的问题。保证两次读取一致,可重复读(mysql数据库默认级别)

ISOLATION_SERIALIZABLE:

是否读取其他事务添加后的数据,解决幻影读的问题

细节:

1.事务级别从低到高:脏读->不可重复读->可重复读->解决幻读

2.事务级别越高,数据越安全,消耗的资源越多,数据库操作性能越低

3.在企业项目中,使用哪一种级别的事务,需要根据业务需求来确定

事务传播行为【理解】

说明:事务传播行为,决定在不同的执行环境中,事务该如何传递。

REQUIRED:

如果已经有事务,就加入该事务中执行;如果没有事务,则新建一个事务。对应增/删/改操作(默认值)

SUPPORTS:

如果已经有事务,支持当前事务的执行;如果没有事务,就以非事务的方式执行。对应查询操作

MANDATORY:

要求在事务环境下执行,如果当前没有事务,则抛出异常

REQUIRES_NEW:

新建事务,如果当前已经存在事务,则把当前事务挂起

NOT_SUPPORTED:

以非事务方式执行,如果当前有事务,则把当前事务挂起

NEVER:

以非事务方式执行,如果当前有事务,则抛出异常

NESTED:

如果当前已经有事务,嵌套在当前事务中执行;如果当前没有事务,则类似于REQUIRED操作

事务的传播行为

public class transactionPropragation{

public void m1(){// 该方法没有事务

}

public void m2(){// 该方法有事务

// m2中调用m1()

m1();// 请求m1有没有事务???

}

public void m3(){// 没有事务

// m3调用m1

m1();

}

}

4.5.TransactionStatus

存储点:

存储过程结构:

create or replace procuder pro

is

begin

save1:

// 记录用户操作日志

save2:

// 操作商品表

save3:

// 操作订单表

save4:

// 操作支付表

end;

事务超时时间

以秒为单位进行设置。如果设置为-1(默认值),表示没有超时限制。在企业项目中使用默认值即可。

是否只读事务

只读事务比读写事务性能要高,实际项目中,查询一般建议设置为只读。

TransactionStatus

它是一个接口,提供了事务具体的执行状态,描述了某一个时间点上事务对象的状态信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值