当前位置: 首页 > news >正文

化州网站建设公司2345浏览器影视大全

化州网站建设公司,2345浏览器影视大全,网站后台的关键词,轻量应用云服务器一.事务的含义:多个操作封装在一起,要么同时执行成功,一旦有一个操作执行失败,那么全部执行失败。这里给大家举个例子:比如A给B转账50元,而B没有收到这50元,此时A转账B这个操作也需要进行回滚,恢复到A给B没…

一.事务的含义:多个操作封装在一起,要么同时执行成功,一旦有一个操作执行失败,那么全部执行失败。这里给大家举个例子:比如A给B转账50元,而B没有收到这50元,此时A转账B这个操作也需要进行回滚,恢复到A给B没转账的状态,不然A转账给B的钱就凭空消失了。

二.Spring中事务的实现

1.编程式事务(手动写代码操作事务)

2.声明式事务(利用注解自动开启开启和提交事务

1.编程式事务

 SpringBoot为我们内置了两个对象,DataSourceTransactionManager用来获取、提交、回滚事务TransactionDefinition用来定义 事务的属性。

2.声明式事务

在类上添加或方法上添加@Transactional注解,会自动帮我们声明事务,当进入方法时,自动开启事务,当方法结束后,自动帮我们提交事务,当遇到异常的时候,自动的回滚事务

当出现异常的时候,会自动帮我们回滚事务

如果我们加上try catch来处理这个异常的话,那么事务就不会回滚了

那像这种情况,因为它出现了异常就需要回滚,但是因为他被try catch捕获了,不能自动回滚了,我们应该如何解决呢?

(1)手动将这个异常抛出

(2)手动回滚事务 

 

 @Transactional作用范围:

当修饰在类上的时候,只有public修饰的方法才生效

当修饰在方法的时候,只有public作为此方法的修饰符时才会生效

 @Transactional参数

三.@Transactional ⼯作原理
Transactional 是基于 AOP 实现的,AOP ⼜是使⽤动态代理实现的。如果⽬标对象实现了接⼝,默 认情况下会采⽤ JDK 的动态代理,如果⽬标对象没有实现了接⼝,会使⽤ CGLIB 动态代理。
Transactional 在开始执⾏业务之前,通过代理先开启事务,在执⾏成功之后再提交事务。如果中途 遇到的异常,则回滚事务。

 

四.Spring事务的隔离级别:

Spring通过isolation属性来设置事物的隔离级别

Isolation.DEFAULT :以链接的数据库隔离级别为准

Isolation.READ_UNCOMMITTED:读未提交,会产生脏读和幻读和不可重复读的问题
Isolation.READ_COMMITTED:读已提交,不会产生脏读的问题,但会产生不可重复读、幻读的问题
Isolation.REPEATABLE_READ:可重复读(Mysql数据库的默认事务隔离级别),会产生幻读的问题
Isolation.SERIALIZABLE:串行化,能解决所有的并发问题,但效率太低
脏读:A事务在写完数据后并没有进行提交,B事务读取完数据,A事务进行回滚
不可重复读:A事务写完数据后提交事务,B数据进行读取,此时A事务再将提交后的数据进行修改然后再提交,此时B事务前后读取的数据是不一样的。
幻读:A事务两次查询得到的结果集不同,因为B事务新增了一部分数据
spring的事务隔离级别比mysql的事务隔离级别多了一种,多了Isolcation.DEFAULT
五.Spring事务的传播机制:
解决的是一个事务再多个方法里被调用的问题

 事务的传播机制一共分为7种:

 下面我们分别从这三类当中取出一种事务来进行演示

1.propagation=Propagation.REQUIRED

支持当前事务:所有的事务执行成功才算成功,一旦有一个事务进行回滚,所有的事务都会进行回滚

 

我们发现报500了 

我们进行访问,此时因为LogService这个类中事务声明的方法里出现了异常,这个事务会进行回滚所以log这条数据不会插入成功,而xiaohzang这条数据也不会插入成功,这是因为它并不会创建新的事务,而是加入到当前事务,此时两个事务可以看成是一个事务,一旦有一个事务进行回滚,其他的事务也会进行回滚。

如果我们把LogService里的那个事务声明的方法里的异常改为手动回滚

此时也会报异常,这是因为内部事务要回滚,但是外部事务感知自己没有异常和手动回滚自己应该要提交,此时外部事务就不知道咋处理了,于是就报异常了,不过最终还是都要回滚 。

2.propagation = Propagation.REQUIRES_NEW

不支持当前事务:各个事务之间不会相互影响,一个事务的回滚不会影响其他的事务。

我们的预期结果是log这条数据不会插入成功,但xiaozhang这条数据会成功插入到用户表中,我们执行一下看一下结果

我们发现500了,查看userinfo数据表,xiaozhang这条数据并没有插入成功 

 这又是为什么呢?因为异常会让所有的事务都感知到然后都会进行回滚

为了更好的演示,我们将异常改为手动回滚

 此时我们再进行访问:

我们查看一下数据库

log这条数据因为进行事务回滚了并没有插入成功

LogService里的这个事务进行回滚,并没有影响其他事务,所以 xiaohzhang这条数据成功插入userinfo表中了

 3.propagation=Propagation.NESTED

嵌套事务:事务之间不相互影响,一个事务的回滚不影响其他事务

 log中并没有插入数据

userinfo表中插入数据了

嵌套事务能实现部分事务回滚的原因:嵌套事务之所以 能够实现部分事务的回滚,是因为事务中有一个保存点的概念,嵌套事务进入之后建立了一个新的保存点,回滚时只回滚到当前保存点,而之前的事务不受影响。

 支持事务(REQUIRED)和嵌套事务(NESTED)的区别:

1.如果所有的事务都执行成功,那么最终结果两者都执行成功

2.支持事务里一旦有一个事务进行回滚,那么所有的事务都会回滚,而嵌套事务会局部回滚,不影响其他事务。

http://www.hkea.cn/news/953526/

相关文章:

  • 如何快速提高网站排名互联网项目推广
  • icp备案网站名称更改成都网站设计
  • 企业网站建设需求分析seo排名资源
  • python基础教程雪峰东莞搜索seo网站关键词优化
  • b2b网站开发供应商小程序开发教程全集免费
  • 用自己的手机做网站外链网站是什么
  • 市场调研公司介绍网站推广优化公司
  • 玉溪人民政府网站建设现状新网站seo
  • 湖南餐饮网站建设2023北京封控了
  • 重庆网站设计人员外贸网站搭建推广
  • 局域网内的网站建设西安网站建设公司排名
  • 普通网站报价多少中南建设集团有限公司
  • 蚌埠做网站哪家好全网营销国际系统
  • 沈阳市网站制作谷歌香港google搜索引擎入口
  • 做美食网站的背景高端网站建设制作
  • 文件什么上传到wordpress泉州seo技术
  • 网站地址地图怎么做网页制作的软件有哪些
  • 如何用万网建设网站口碑营销策划方案
  • 做网站的基础架构东莞seo建站公司
  • 嘉兴做网站的哪家好龙岗网站制作
  • 论坛做网站好吗百度官方网页
  • 微信开发者工具获取系统日期seo优化一般包括
  • 怎么用文本做网站百度排行榜风云榜
  • 未来网站开发需求多搜索网站有哪几个
  • 网站建设 成都郑州高端网站制作
  • 快站怎么做淘客网站深圳关键词
  • 做网站时如何去掉网站横条小红书软文案例
  • 图虫南宁百度快速排名优化
  • 上城网站建设app推广文案
  • 网站建设特点宁波seo搜索引擎优化公司