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

网站建设分几次付钱asp网站的安全性

网站建设分几次付钱,asp网站的安全性,做阿里巴巴网站装修要多久,智慧团建密码格式一.事务的含义:多个操作封装在一起,要么同时执行成功,一旦有一个操作执行失败,那么全部执行失败。这里给大家举个例子:比如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/710445/

相关文章:

  • 广告设计网站免费wordpress加速访问
  • 生物科技网站建设方案网站做宣传
  • 当今做网站的流行家乡网站设计模板
  • 登封免费网站建设企业做网站需要多少钱
  • 买网站账号做推广wordpress网页走丢了
  • 网上商城建站服务商松江区做网站的公司
  • 网站开发实例教程外贸论坛有哪些平台
  • 天津专业网站策划公司短网址生成链接
  • 网站备案流程2016北京软件外包公司排行榜
  • 网站建设对信息公开的作用湘潭企业关键词优化厂家报价
  • 网站验收标准网页游戏制作过程的
  • 网站建设资料填写外贸论坛有哪些?
  • 网站建设源码专业的铁岭做网站公司
  • 做网站的外包公司有哪些南宁app开发公司哪个好
  • 赣州企业网站建设公司客户网站留言
  • 温州网站建设专家企业主页包含
  • 什么网站可以找手工活做php数据库的网站模板
  • 专业的模板建站企业天津市建设网官网
  • 餐厅网站设计麻豆秋白色蕾丝半身裙
  • 朔州网站seo厦门网站建设优化
  • 营销型网站建设主要步骤logo字体在线设计生成器
  • 美团做团购网站系统更新后wordpress
  • 培训网站源码wordpressyes风淘宝网站
  • 上线了建站教程辽宁网站建设推广哪家便宜
  • 绍兴网站建设设计制作网页制作基础教程第二版答案
  • 关于数据机房建设的网站兼职招聘
  • 衡阳建设网站网站开发用什么语言比较流行
  • 阿里云的网站程序如何做网站制作app免费软件
  • 做平面设计必知的网站做网站自己上传电影要多大服务器
  • 怎样做动漫网站不算侵权网站标题间隔符