牛客网项目第三章-事务管理

文章介绍了在开发牛客网项目时遇到的事务管理问题,特别是在多线程环境下如何处理并发事务。讨论了事务的隔离级别,如可重复读和读已提交,并解释了Spring框架中的声明式和编程式事务管理,包括不同的事务传播机制,如REQUIRED、REQUIRES_NEW和NESTED。通过测试案例展示了事务回滚的情况。
摘要由CSDN通过智能技术生成

牛客网项目第三章-事务管理
下一个要开发的功能是评论,在这个功能里需要用到事务管理的功能
在这里插入图片描述
在这里插入图片描述
事务的隔离性是针对并发而言的,如果在多线程的环境下,没做事务隔离,会发生事务并发问题,我们所开发的服务器程序,是一个多线程环境,多事务并发的场景,每一个浏览器访问服务器的时候,服务器就会创建一个线程去处理它的请求,在这次请求中需要访问数据库,就可能会产生事务的操作。多个用户同时访问同一个网站的同一个功能,同时访问同一条数据的情况,不进行隔离性处理,就可能会引发并发事务的问题。

一、事务并发问题

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

二、在不同的事务隔离级别下处理并发事务问题

在这里插入图片描述
在这里插入图片描述
如果对安全性要求高一点,通常选择可重复读的事务隔离级别;
如果对应用对数据的完整性要求不高,对性能要求很高的时候选择读已提交的事务隔离级别。

三、数据库保障事务的机制的实现

在这里插入图片描述

四、Spring事务管理

在这里插入图片描述
只控制局部事务,使用编程式事务,本项目使用声明式事务
1.在业务层的AlphaService做一个事务的例子
例如,注册一个用户,并自动给用户发一个帖子,一个业务做了两个增加的操作,保证它的事务性。
在这里插入图片描述
2.采用声明式事务,通过注解声明save1()方法的事务特征
在这里插入图片描述
3.事务有4种隔离级别和7种事务传播机制
事务隔离级别用来解决事务并发访问的问题
事务传播机制是用来解决事务交叉的问题,A事务调用B事务,A事务应该按照自己的机制为准还是B事务的机制为准
在这里插入图片描述
REQUIRED:支持当前事务(外部事物),如果不存在则创建新事务
例:A事务调B事务,对于B事务来说A事务属于外部事物,如果A事务存在按照A事务的机制来,否则B事务创建自己的新事物按照自己的机制来
REQUIRES_NEW: 创建一个新事务,并且暂停当前事务(外部事务)
例:A事务调B事务,对于B事务来说A事务属于外部事物,A事务存在也给暂停调,B事务创建新事务按照自己的机制来
NESTED:如果当前存在事务(外部事务),则嵌套在外部事务中执行(独立的提交和回滚)。否则和REQUIRED一样
例:A事务调B事务,对于B事务来说A事务属于外部事物,如果A事务存在,则B事务嵌套在A事务中执行,并且B事务有自己独立的提交和回滚,如果事务不存在,B事务创建自己的新事物按照自己的机制来
4.测试,在test包下创建测试类TransactionTests
在这里插入图片描述
发现数据库里没有传入数据,执行失败,事务回滚了
5.采用编程式事务,定义save2()方法的事务特征
在这里插入图片描述
在这里插入图片描述
6.测试
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值