理解spring事务,就要理解数据库ACID的Isolation,隔离性。

脏读、不可重复读、幻读

这几种场景都是针对多个事务并发处理的情况

脏读 :脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据。

不可重复读 :是指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。

幻读 : 是指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好象发生了幻觉一样。

SQL的事务隔离级别

未提交读(Read Uncommitted):一个事务能够读取到 别的事务中没有提交的更新数据。事务可以读取到未提交的数据,这也被称为脏读(dirty read)。所以这种级别很有可能读到脏数据,隔离级别最低。

提交读(Read Committed):一个事务只能读取到别的事务提交的更新数据。一般我们提交读就可以了。只能读取到已经提交的数据。即解决了脏读,但未解决不可重复读。(oracle默认的)

可重复读(Repeated Read):保证同一事务中先后执行的多次查询将返回同意结果,不受其他事务的影响。这种隔离级别可能出现幻读。(mysql默认的)

序列化(Serializable):不允许事务并发执行,强制事务串行执行,就是在读取的每一行数据上都加上了锁,读写相互都会阻塞。这种隔离级别最高,是最安全的,性能最低,不会出现脏读,不可重复读,幻读,丢失更新。

数据库通过 set transaction-isolation xxx 设置事务隔离级别。

Spring事务传播

REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED)

支持当前事务,如果没有事务会创建一个新的事务

SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS)

支持当前事务,如果没有事务的话以非事务方式执行

MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY)

支持当前事务,如果没有事务抛出异常

REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW)

创建一个新的事务并挂起当前事务

NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED)

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

NEVER(TransactionDefinition.PROPAGATION_NEVER)

以非事务方式进行,如果存在事务则抛出异常

NESTED(TransactionDefinition.PROPAGATION_NESTED)

如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

小结

spring的事务传播机制,是解决函数调用的时候事务传播问题,理解清楚非常有必要。

java事务传播机制事例,spring事务传播机制相关推荐

  1. 布式事务实践 解决数据一致性 Spring事务机制

    Spring事务机制 介绍Spring的事务机制.事物抽象.内部事务和外部事物,以及常用的几种事务管理的实现,包括DataSource.JPA.JMS.JTA都通过实例进行说明.还有XA以及两阶段提交 ...

  2. mysql与spring隔离级别不同_mysql事务隔离级别与spring事务隔离级别的区别

    mysql事务隔离级别与spring事务隔离级别的区别: 脏读:为什么会出现脏读,因为你对数据库的任何修改都会是立即生效的,至于别人能不能看到主要取决与你 是否加锁了,数据库的执行与事务没有关系,事务 ...

  3. JDK的 SPI 机制,Spring的 factories 机制

    目录 jdk的SPI机制 spi简介 使用示例 spring的factories机制 factories机制简介 使用示例 总结 jdk的SPI机制 spi简介 模块之间一般推荐基于接口编程,不与具体 ...

  4. java事务传播机制事例_Spring事务传播机制

    addBook()代码 Java代码  收藏代码 public void addBook() throws Exception{ this.jdbcTemplate.execute(ADD_BOOK) ...

  5. java spring 事务传播_实战Spring事务传播性与隔离性

    一.事务传播性 1.1 什么是事务的传播性 事务的传播性一般在事务嵌套时候使用,比如在事务A里面调用了另外一个使用事务的方法,那么这俩个事务是各自作为独立的事务执行提交,还是内层的事务合并到外层的事务 ...

  6. 什么是事务、事务特性、事务隔离级别、spring事务传播特性

    1.什么是事务: 事务是指程序中的一个操作序列.其特点是:该序列的所有操作要么全部成功完成,要么只要有一个操作失败,则该序列所有操作都将被撤销.这也是事务的原子性(要么成功,要么失败). 2.事务特性 ...

  7. 数据库事务原理详解-Spring 事务的传播属性

    所谓spring 事务的传播属性,就是定义在存在多个事务同时存在的时候,spring 应该如何处理这些事务的行为.这些属性在TransactionDefinition 中定义,具体常量的解释见下表: ...

  8. 事务隔离级别和传播行为_?Spring事务的传播行为案例分析

    简介:网上关于Spring事务传播性以及隔离型的文章漫天盖地,还有不负责任的直接复制名词意思,文章虽然很多却是看的云里雾里,我们今天将给出案例分别和大家一起学习. 网上关于Spring事务传播性以及隔 ...

  9. Java面试必问!Spring事务扩展机制(2)

    TransactionAspectSupport#invokeWithinTransaction TransactionAspectSupport#invokeWithinTransaction 是 ...

  10. JDBC事务和JTA事务的区别 --包含spring事务 声明式事务

    2019独角兽企业重金招聘Python工程师标准>>> 一.事务概述 事务表示一个由一系列的数据库操作组成的不可分割的逻辑单位,其中的操作要么全做要么全都不做. 与事务相关的操作主要 ...

最新文章

  1. seaborn使用violinplot函数可视化小提琴图、并在violinplot函数中设置inner参数来添加横线(inner=“stick“)显示数据的稠密程度
  2. Python+selenium自动化测试中Windows窗口跳转方法
  3. 如何完成从研究型到工程型的转变
  4. sql server 关联更新
  5. oracle mysql 效率_关于oracle 数据库效率的优化
  6. 有没有高效的记视频笔记方法?--天若OCR文字识别记视频笔记
  7. python中argv的用法
  8. Tomcat源码解析四:Tomcat关闭过程
  9. python学习环境+开发环境的选择和配置
  10. 英特尔预计5年内将成智能手机芯片大厂
  11. C#解密出生日期【C#】
  12. 3002基于二叉链表的树结构相等的判断(附WA的可能情况)
  13. Ecshop 商品页配送方式添加 实现仿淘宝按地区显示运费
  14. 概念的理解 —— 电学
  15. VoxelNet:End-to-End Learning for Point Cloud Based 3D Object Detection阅读笔记
  16. java代码如何降低重复率_JAVA 如何实现大文本去除重复行
  17. protues仿真之数码管消影问题
  18. tp对接支付宝转账提现
  19. 瑞金医院启动神经领域 AI 技术临床研究;好未来、清华大学成立研究中心,共建“AI+教育”智慧课堂...
  20. 电话号码的字母组合---2022/01/23

热门文章

  1. java的链表(LinkedList类)
  2. 长度游程编码的JAVA源代码,java游程编码
  3. xftp6提示要继续使用此程序,您必须应用最新的更新
  4. 收藏!一文掌握数据分析知识体系
  5. c语言编程中分数怎么表示,用C语言编程平均分数
  6. otc机器人tp_发那科机器人TP 示教器按键使用简介
  7. CSS3 GPU硬件加速
  8. 并查集详解(C/C++)
  9. GitHub桌面版使用教程及中文版插件安装
  10. 身份证校验码计算:根据身份证前17位计算第18位校验码-c++实现