一、spring事务管理

1、 什么是事务

  事务(Transaction)是多个操作数据库的步骤(CRUD)的集合,是并发控制的单位,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。达到保持数据完整性的作用。

2、 事务特点

  1)  原子性

  一个事务所有对数据库操作是一个最小单位,不可细分;要么执行,要么不执行

  2)  隔离性

  事务之间可以同时执行,不会互相干扰,是隔离的

  3)  一致性

  事务执行成功数据库变更,事务执行失败数据库不变更,即事务一致性

  4)  持久性

  事务执行成功,之后的结果是持久的,一直保持

3、 事务配置方式

  1)  编程式事务

  编程式事务指的是通过编码方式实现事务,需要配置文件添加配置,并且在编码中也需要配置,现在使用越来越少

  2)  声明式事务

  建立在AOP之上的。对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务;声明式事务配置一般有五种(abcde),两种配置方式较为常用:我喜欢用第一种

    a)         使用AOP的方式实现事务配置

      

i.     aop:pointcut标签配置参与事务的类,由于是在Service中进行数据库业务操作,配的应该是包含那些作为事务的方法的Service类。

         首先应该特别注意的是id的命名,同样由于每个模块都有自己事务切面,所以我觉得初步的命名规则因为 all+模块名+ServiceMethod。而且每个模块之间不同之处还在于以下一句:

        expression="execution(* com.test.testAda.test.model.service.*.*(..))"

      其中第一个*代表返回值,第二*代表service下子包,第三个*代表方法名,“(..)”代表方法参数。

ii.   aop:advisor标签主要将事务属性配置和开启事务类进行关联

iii.    tx:attributes标签主要是配置事务的方法属性类型,name=add*中表示事务中所有以add开头的方法。

    b)         注解式配置

i.    Spring-mybatis

      

ii.  Spring-hibernata

      

iii.   注意@Transaction注解的使用

        这个注解只能使用在public方法上,别的不会报错,但是没有效果;如果这个注解放在类上,类里面的所有public方法都会有效。

iv.   全注解的使用方式

      

v.   注解中属性详解

        Propagation是传播属性,REQUIRED代表使用当前开启事务;rollbackFor=Exception.class代表出现异常回滚,可以指定多个异常;

        Timeout =1 事务的超时性;

        Isolation代表事务隔离级别,上面的是默认;

        配置readOnly=true表示当前事务为只读事务,如果为false为可读写,默认是false。

vi.   注解位置

        注解最好放在具体的类或者方法上,不要放在接口上,因为注解不具有继承性,所以如果读取不到注解信息,将不会读取到相应对象二进行事务配置。

    c)  每个bean都有一个代理

      https://blog.csdn.net/hjm4702192/article/details/17277669

    d)  所有bean共享一个代理基类

      https://blog.csdn.net/hjm4702192/article/details/17277669

    e)  使用拦截器

      https://blog.csdn.net/hjm4702192/article/details/17277669

4、 事务隔离级别

  事务隔离级别指的是多个并发事务之间的隔离程度

  1)  ISOLATION_DEFAULT

    此种隔离级别是事务管理默认配置的,使用数据库的默认隔离级别,上面的配置中就是使用此种级别,下面的四种级别与jdbc的相对应。

  2)  ISOLATION_READ_UNCOMMITTED

    未提交读。允许其他事务可以看到本事务未提交的数据,可造成脏读、幻读和不可重复读

  3)  ISOLATION_READ_COMMITTED

    提交读。其他事务只能读取到本事务提交后的数据,本事务不提交,其他事务无法读取到本事务数据,可防止脏读,可能出现幻读和不可重复读

  4)  ISOLATION_REPEATABLE_READ

    可重复度。保证事务不提交就不会读取到其数据,防止脏读和不可重复读,可能发生幻读。

  5)  ISOLATION_SERIALIZABLE

    可串行化。牺牲效率顺序执行事物,如果事物执行异常,其他事务阻塞。防止脏读,幻读和不可重复。

5、 事务传播属性

  1)  PROPAGATION_REQUIRED

    使用当前事务,如果当前无事务,新建一个事务

  2)  PROPAGATION_SUPPORTS

    使用当前事务,如果当前无事务,使用非事务方式执行

  3)  PROPAGATION_MANDATORY

    使用当前事务,如果当前无事务,抛出异常

  4)  PROPAGATION_REQUIRES_NEW

    每次执行新建事务,如果当前存在事务,将当前事务挂起

  5)  PROPAGATION_NOT_SUPPORTED

    以非事务方式执行,如果当前存在事务,将当前事务挂起

  6)  PROPAGATION_NEVER

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

  7)  PROPAGATION_NESTED

    嵌套类事务,如果当前存在事务,则在当前事务内新建事务并执行,如果当前无事务,与第一条同样方式执行

二、数据库隔离级别

1、未提交读

    (Read Uncommitted):允许脏读,也就是可能读取到其他会话中未提交事务修改的数据

2、提交读

    (Read Committed):只能读取到已经提交的数据。Oracle等多数数据库默认都是该级别 (不重复读)

3、可重复度

    (Repeated Read):可重复读。在同一个事务内的查询都是事务开始时刻一致的,InnoDB默认级别。在SQL标准中,该隔离级别消除了不可重复读,但是还存在幻象读

4、可串行化

(Serializable):完全串行化的读,每次读都需要获得表级共享锁,读写相互都会阻塞

三、数据异常

1、脏读

A事务正在添加zhangsan信息,但是还没提交,数据库就已经能读取到张三信息。

2、幻读

    多个事务同时修改同一条记录,事务之间不知道彼此存在,当事务提交之后,后面的事务修改的数据将会覆盖前事务,前一个事务就像发生幻觉一样

例如:同时修改某行数据

          事务A将姓名字段修改为zhangsan,

事务B将姓名字段修改为lisi

事务提交,事务B将覆盖A数据,也就是zhangsan丢失。                

3、不可重复读

在A事务中,两次读取同一个数据,在A事务第一次读取数据之后,B事务修改这条数据,当A事务再次读取这条数据之后,获取到的结果与第一次读到的不一致。(读取到的数据不一致)

       事务完成操作之前,不允许其他事务进行操作,可避免

Spring事务管理amp;数据库隔离级别相关推荐

  1. Spring事务管理-传播行为-隔离级别

    事务是逻辑上的一组操作,这组操作要么全部成功,要么全部失败. 事务的特性:ACID 原子性:事务是一个不可分割的工作单位,事务中的操作要么都发生,要么都不发生 一致性:事务前后数据的完整性约束保持一致 ...

  2. Spring事务传播属性和隔离级别

    Spring事务传播属性和隔离级别 一.Spring事务传播属性(Propagation): 1) REQUIRED(默认属性) 如果存在一个事务,则支持当前事务.如果没有事务则开启一个新的事务.  ...

  3. spring事务和mysql的隔离级别

    mysql事务.mysql隔离级别.mysql锁.mysql数据一致性.Spring事务.Spring事务传播性之间的关系 一直有些模糊,整理一下. mysql事务: 在mysql中,只有使用了Inn ...

  4. 说说Spring事务传播行为和隔离级别

    分析&回答 Spring事务的4个隔离级别 Isolation Level(事务隔离等级): Serializable:最严格的级别,事务串行执行,资源消耗最大: REPEATABLE REA ...

  5. Spring事务管理--(一)数据库事务隔离级别与mysql引擎基础讲解

    一.前言 本篇文章来自网络整理,很简单,但是很实用对于初级和中级工程师. 原创地址1:http://www.cnblogs.com/hollen/archive/2012/05/13/2498309. ...

  6. Spring的隔离级别事务传播属性数据库隔离级别之间的联系

    一.Spring五大事务隔离级别 Spring事务隔离级别比数据库事务隔离级别多一个default 在进行配置的时候,如果数据库和spring代码中的隔离级别不同,那么以spring的配置为主.1) ...

  7. Spring事务传播机制和隔离级别

    Spring有5种隔离级别,7种传播行为.这是面试常问的内容,也是代码中经常碰到的知识点.这些知识枯燥而且乏味,其中有些非常的绕.如果栽在这上面,就实在是太可惜了. @Transactional(is ...

  8. Spring事务传播性与隔离级别

    为什么80%的码农都做不了架构师?>>>    事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题. 事务最重要的两个特性,是事务的传 ...

  9. spring事务传播属性与隔离级别

    一.Propagation (事务的传播属性) Propagation : key属性确定代理应该给哪个方法增加事务行为.这样的属性最重要的部份是传播行为. 有以下选项可供使用: PROPAGATIO ...

最新文章

  1. Linux忘记密码常用的几种解决方法
  2. 独家专访:SequoiaDB 3.0 版本正式发布!协议级完整兼容MySQL!
  3. EntityFramework 7 OrderBy Skip Take-计算排序分页 SQL 翻译
  4. JZOJ 5263. 【NOIP2017模拟8.12A组】分手是祝愿
  5. 如何在CentOS 5.5上安装Kippo蜜罐
  6. 路径规划算法_自动驾驶汽车路径规划算法浅析
  7. Windows 环境下 Chrome浏览器崩溃“STATUS_INVALID_IMAGE_HASH”
  8. 数组与串,串的实现,KMP,BF算法
  9. 图形裁剪算法matlab,MATLAB裁剪图片
  10. 组合数学练习题(二)——Chemist
  11. Ubuntu编译安装Keepalived
  12. 小小知识点(三十六)EXCEL闪退解决办法
  13. SQL Server 2000升级sp4补丁的时候出现“以前进行的程序安装创建了挂起的文件操作”的错误!...
  14. android 获取alertdialog的view,Android开发实现AlertDialog中View的控件设置监听功能分析...
  15. RTNETLINK answers: File exists的解决方案
  16. 计算机安全模式无法启动修复,win7旗舰版安全模式故障修复教程
  17. 在线YAML转JSON工具
  18. 打造稳定可靠聪明的智慧酒店系统
  19. windows彻底删除idea
  20. 创建新的Cocos2d-JS工程

热门文章

  1. eve 服务器在哪个文件夹,eve服务器地址
  2. 【图像】jpg与jpeg的区别
  3. 科大星云诗社动态20210502
  4. 科大星云诗社动态20210810
  5. 云炬随笔20210714(1)
  6. 3DSlicer29:Debug or Dev-170918
  7. ArcGis10安装步骤
  8. [转载]C#中实现强制整除 来源:网络
  9. go语言游戏编程-Ebiten渲染一张图片
  10. 数字信号处理-C语言数字信号的产生