Spring事务五边形
ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)
事务五边形
- 传播行为
- 隔离级别
- 是否只读
- 事务超时时间
- 回滚规则
// Spring事务核心接口
public interface TransactionDefinition {int getPropagationBehavior(); // 返回事务的传播行为int getIsolationLevel(); // 返回事务的隔离级别,事务管理器根据它来控制另外一个事务可以看到本事务内的哪些数据int getTimeout(); // 返回事务必须在多少秒内完成boolean isReadOnly(); // 事务是否只读,事务管理器能够根据这个返回值进行优化,确保事务是只读的
}
传播行为
//用法示例
@Transactional(propagation=Propagation.REQUIRED)
事务行为 | 说明 |
---|---|
REQUIRED | 支持当前事务,假设当前没有事务。就新建一个事务 |
SUPPORTS | 支持当前事务,假设当前没有事务,就以非事务方式运行 |
MANDATORY | 支持当前事务,假设当前没有事务,就抛出异常 |
REQUIRES_NEW | 新建事务,假设当前存在事务。把当前事务挂起 |
NOT_SUPPORTED | 以非事务方式运行操作。假设当前存在事务,就把当前事务挂起 |
NEVER | 以非事务方式运行,假设当前存在事务,则抛出异常 |
NESTED | 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作 |
默认REQUIRED。
参考资料:https://blog.csdn.net/qq_38526573/article/details/87898161
数据库事务隔离级别
事务隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
读未提交(read-uncommitted) | 是 | 是 | 是 |
不可重复读(read-committed) | 否 | 是 | 是 |
可重复读(repeatable-read) | 否 | 否 | 是 |
串行化(serializable) | 否 | 否 | 否 |
事务的并发问题
- 脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据
- 不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。
- 幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。
注:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住满足条件的行,解决幻读需要锁表
MySQL默认:REPEATABLE-READ(可重复读)
# MySQL查看隔离级别
select @@tx_isolation;
Oracle默认:READ COMMITTED(读已提交)
参考资料:https://blog.csdn.net/trigl/article/details/50968079#t21
Spring事务的隔离级别
//用法示例
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
Spring事务隔离级别比数据库事务隔离级别多一个default,这也是PlatfromTransactionManager默认的隔离级别,表示使用数据库默认的事务隔离级别,Spring另外四个隔离级别同数据库的隔离级别。
Spring事务五边形相关推荐
- Spring事务管理 与 SpringAOP
1,Spring事务的核心接口 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解Spring实现事务的具体策略. ...
- Spring事务管理(详解+实例)
写这篇博客之前我首先读了<Spring in action>,之后在网上看了一些关于Spring事务管理的文章,感觉都没有讲全,这里就将书上的和网上关于事务的知识总结一下,参考的文章如下: ...
- spring事务再研究
2019独角兽企业重金招聘Python工程师标准>>> 转载http://www.mamicode.com/info-detail-1248286.html 写这篇博客之前我首先读了 ...
- Spring进阶(五):Spring事务管理(详解+实例)
文章目录 一.前言 二.核心接口 2.1 事务管理器 2.1.1 JDBC事务 2.1.2 Hibernate事务 2.1.3 Java持久化API事务(JPA) 2.1.4 Java原生API事务 ...
- 关于事务管理的理解和Spring事务管理详解
转载于:http://www.mamicode.com/info-detail-1248286.html 1 初步理解 理解事务之前,先讲一个你日常生活中最常干的事:取钱. 比如你去ATM机取1000 ...
- Spring事务管理(转载自佚名大神)
我的文章是转载大神的,是大神文章中一小部分,请看: http://www.mamicode.com/info-detail-1248286.html 1.初步理解 比如你去ATM机取1000块钱,大体 ...
- (转)面试必备技能:JDK动态代理给Spring事务埋下的坑!
一.场景分析 最近做项目遇到了一个很奇怪的问题,大致的业务场景是这样的:我们首先设定两个事务,事务parent和事务child,在Controller里边同时调用这两个方法,示例代码如下: 1.场景A ...
- spring的事务隔离_再深一点:面试工作两不误,源码级理解Spring事务
原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处. Spring有5种隔离级别,7种传播行为.这是面试常问的内容,也是代码中经常碰到的知识点.这些知识枯燥而且乏味,其中有些非 ...
- spring上下文是什么意思_Java程序员只会CRUD连Spring事务传播机制都不懂?
AQS到底有什么用?难道就真的只是为了面试吗? 当然不是说AQS没用,如果你不是做基础架构或者中间件开发,你很难感受到AQS的威力.当然,学习很多时候,需要的是正向反馈,学了太多造火箭的东西,面试完就 ...
最新文章
- Python 标准库之 subprocesss
- 连这几个源码都没啃透,那面试高级开发的事等等再来!
- VC++、MFC最好的开源项目
- 网络工程师应该掌握的50个路由器知识要点
- LoadRunner 测试Tuxedo的问题
- 原子变量、volatile、synchronized的可见性和原子性比较
- AS 中 Plugin for Gradle 和 Gradle 之间的版本对应关系
- JavaScript调用WebServices
- 【剑指offer - C++/Java】14、链表中倒数第k的节点
- Python 数据分析实战:经典的同期群分析
- 电脑休眠跟睡眠的区别
- mongodb的管理员和安全认证
- python3打造专属的下载软件
- yum源的三种安装配置方式,总有一款适合你
- 最大公约数和最小公倍数
- 微信公众平台测试账号申请
- 数字化到底有什么用?
- php 野生动物公益保护系统
- 谜题(Puzzle)
- 上传到docker hub_在容器上构建持续部署及最佳实践初探
热门文章
- Vue3电商项目实战-购物车模块2【04-头部购物车-商品列表-本地、05-头部购物车-删除操作-本地、06-购物车页面-基础布局】
- C语言链栈(基本压栈,弹栈,取栈顶元素)
- 【科普】一文弄懂监督式学习、非监督式学习以及强化式学习
- 给LinearLayout的addView()、removeView()添加动画
- 我的世界服务器多世界显示称号,Flover1.7.2RPG服务器 送中文头衔称号游戏头上显示...
- 微信小程序无法找到组件的问题 [“usingComponents“][“component1“]:“xxx“未找到
- 黑衣剑士查询账号所在服务器,刀剑神域手游黑衣剑士为什么登不了 刀剑神域黑衣剑士王牌服务器进不去...
- 重学数据库MySQL
- 关于开机老弹出腾讯网迷你网首页,关闭后又弹出www.37ss.com的问题
- 迎难而上:向投身数学与统计学的女性致敬