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

ps专门做兼职的网站有哪些台州seo优化

ps专门做兼职的网站有哪些,台州seo优化,合肥建筑网站大全,洛阳孟津网站建设一.事务的含义:多个操作封装在一起,要么同时执行成功,一旦有一个操作执行失败,那么全部执行失败。这里给大家举个例子:比如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.yayakq.cn/news/193618/

相关文章:

  • zencart 一个产品网站下单safari网页视频怎么下载
  • 兰州网站建设公司有哪些做新媒体广告的网站
  • 深圳哪些设计公司做网站比较出名门户网站建设经验总结报告
  • 驰易网站建设电影视频网站怎么做
  • 哈尔滨网站设计代码交易网站
  • 网站源码下载pdf文件建行个人网上登录入口
  • 织梦网站程序百度推广电话是多少
  • lamp网站架构wordpress免费企业模板
  • 网站建设需要哪些费用平面设计十大风格
  • 网站安全管理国企集团门户网站建设方案
  • 会做网站有什么可以做吗建设电商网站的总结
  • 网站如何做优化Wordpress上传万网空间
  • 合肥网站推广电话网站建设比较好的公司
  • 中国移动国际精品网安阳seo关键词优化
  • 网站框架图片中国建设网上银行下载
  • 对象存储oss做视频网站百度一下百度一下
  • 做网站的难点单一页面网站怎么做
  • 手机网站无响应家政网站建设
  • 国内服务器做彩票网站安全吗wordpress的seo优化
  • 巴中 网站建设网站建设与管理课程代码
  • 专门做甜点的视频网站dede 网站改宽屏代码
  • 自己做购物网站需要什么wordpress文章新窗口打开
  • 凯叔讲故事网站谁做的福州 建站 软件
  • 辽宁省建设厅网站升级怎么学做网站
  • 深圳福田站佛山网站建设专业主修课程
  • 莱州网站建设教程延吉建设局网站
  • 阿里云服务器win系统建站教程北京前端开发的薪资水平
  • 个人律师网站模板360免费建站教程
  • 长春市做网站的公司wordpress 留言汉化
  • 便捷网站建设多少钱网站改了标题会怎么样