关于Spring事务隔离、传播属性与@Transactional注解
作者:wangjun5159 发布时间:2021-11-15 04:37:11
mysql默认的隔离级别是repeatable_read
根据spring文档,数据库一共有4个隔离级别
read_uncommit
read_commited
读已提交 ,解决了脏读
repeatable_read
可重复读,解决了不可重复读
serializable
顺序化 ,解决了幻读
对应的java类,org.springframework.transaction.annotation.Isolation
脏读
事务1修改了行1,但是还没commit,事务2读取了未commit的行1,事务1回滚了行1;
不可重复读
事务1读了行1,事务2修改了行1并commit,事务1再次读了行1,发现行1变了。
幻读
事务1读了满足where条件的所有行,事务2插入了满足where的一行,事务1再读同样的where条件时,获取了额外的“幻行”。
spring传播属性
spring事务传播属性,org.springframework.transaction.annotation.Propagation
,其他有
required
当前有事务,则利用已有事务;当前没有事务,则创建事务;
required_new
创建新事物,如果存在事务,暂停当前事务;注意这里的措辞,先创建新事务,然后再判断是否存在事务,如果存在,则暂停;
supports
当前有事务,使用当前事务,否则无事务执行;
nested
如果当前存在事务,则创建子事务,其他的就跟required相同;只在特定的事务管理器支持nested,开箱即用的有JDBC DataSourceTransactionManager,有些JTA providers可能也支持nested事务;
never
非事务执行,如果有事务则抛出异常;
mandatory
使用当前事务,如果没有事务则抛出异常;
@Transactional注解
@Transactional注解 事务超时时间:依赖底层事务系统,取决于数据库。
rollbackfor
默认RuntimeException回滚;checked exceptions(business exception)不会回滚;
readonly
只能有查询语句,不能有update、insert语句,仅对required、required_new起作用。
总结
隔离级别和传播属性是两个概念,隔离级别属于数据库,传播属性是spring的,它们的所有者是不同的;隔离级别是为了解决事物间影响的问题;传播属性是为了解决,方法间事务互相利用的问题;
来源:https://wangjun5159.blog.csdn.net/article/details/115251146


猜你喜欢
- 目录1.摘要2.C#中定时任务的最简方法3.定时任务阻塞现象4.阻塞现象原因分析5.问题解决总结1.摘要本文会介绍一个C#中最简单定时任务的
- 优点1.装饰类和被装饰类可以独立发展,不会相互耦合,装饰模式是继承的一个替代模式,装饰模式可以动态扩展一个实现类的功能。缺点2.多层装饰比较
- 在Android程序中很多客户端软件和浏览器软件都喜欢用Tab分页标签来搭建界面框架。读者也许会马上想到使用TabHost 与 TabAct
- 一、线程池使用场景•单个任务处理时间短•将需处理的任务数量大二、使用Java线程池好处1、使用new Thread()创建线程的弊端:•每次
- 前面介绍了Spring Boot 整合mybatis 使用注解的方式实现数据库操作,介绍了如何自动生成注解版的mapper 和pojo类。
- 数据表及数据准备:create table Member(MemberId int primary key identity(1,1),Me
- 本文实例为大家分享了闪耀字体效果的具体代码,供大家参考,具体内容如下import android.content.Context;impor
- AppWidgetProvider 用来在HOME页面显示插件实现步骤:1、为AppWidget提供一个元布局文件AppWigdetProv
- 1、什么是AOPAOP是Aspect Oriented Programming的缩写,意思是面向方面编程,AOP实际是GoF设计模式的延续。
- 摘要:在spring boot中 MVC这部分也有默认自动配置,也就是说我们不用做任何配置,那么也是OK的,这个配置类就是 WebMvcAu
- 引用开源框架通过AsyncHttpClient进行文件上传,具体内容如下一、步骤:1.添加权限(访问网络权限和读写权限)2.获取上传文件路径
- 本文实例为大家分享了Android SurfaceView画板操作的具体代码,供大家参考,具体内容如下画板—&m
- 简介SPI(Service Provider Interface)是JDK内置的一种服务提供发现机制,可以用来启用框架扩展和替换组件,主要用
- 一、OpenCV OpenCV(开源计算机视觉库)是一个开源的计算机视觉和机器学习软件库,是一个基于C与C++的跨平台计算机视觉处
- 导出Excel的框架有很多种,POI相对来说比较老了,很多Excel框架底层都是POI、有EasyPoi、EasyExcel、包括Hutoo
- mybatis 报错显示sql中有两个limit使用mybatis进行分页查询时,打印的查询sql中带有两个limit。经过审查:原因是由于
- 本文实例为大家分享了Dijkstra算法实现校园导游程序的具体代码,供大家参考,具体内容如下应用设计性实验1.问题描述校网导游程序: 一个校
- scheduleAtFixedRate(task,time,period)task-所要安排的任务 time-首次执行任务的时间 perio
- 前言在《C# wpf Canvas中实现控件动态调整大小》中我们实现了Canvas中的控件动态调整大小,由于Grid也是可层叠布局,在Gri
- 本文讲解了如果通过springboot快速开发web服务,并读取zookeeper的过程,为后续的“在docker下部署