面试官:说说 Spring 事务设计原理?面试必问!
上一篇:利用注解 + 反射消除重复代码,妙!
作者:张丰哲
来源:www.jianshu.com/p/1becdc376f5d
面试官:说说 Spring 事务设计原理?
你搞懂了么??
前言
事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败。事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性)。
在实际开发中,我们对事务应用最多就是在数据库操作这一环,特别是Spring对数据库事务进行了封装管理。
Spring对事务的支持,确实很强大,但是从本质上来讲:事务是否生效取决数据库底层是否支持(比如MySQL的MyISAM引擎就不支持事务,Spring能奈何!),同时一个事务的多个操作需要在同一个Connection上。事务也往往是在业务逻辑层来控制。
本篇博客将通过手写一个Demo来分析Spring事务底层到底是如何帮助我们轻松完成事务管理的!
透彻理解Spring事务设计思想之手写实现
先来看一眼工程结构:
ConnectionHolder
在Spring中,有时候我们是不是要配置多个数据源DataSource?很显然,Spring需要通过DataSource来得到操作数据库的管道Connection,这有点类似于JNDI查找。
这里通过ConnectionHolder类来完成这个过程,需要思考的是在多线程下,这显然是存在问题的。为避免多线程问题,难道我们采用线程安全的Map,比如ConcurrentHashMap,其实我们真正的目的是什么?是保证一个线程下,一个事务的多个操作拿到的是一个Connection,显然使用ConcurrentHashMap根本无法保证!
Spring很聪明,她提供了一种思路,来解决,看下面的代码!另外,Spring 系列面试题和答案全部整理好了,微信搜索互联网架构师,在后台发送:2T,可以在线阅读。
SingleThreadConnectionHolder
本来线程不安全的,通过ThreadLocal这么封装一下,立刻就变成了线程的局部变量,不仅仅安全了,还保证了一个线程下面的操作拿到的Connection是同一个对象!这种思想,确实非常巧妙,这也是无锁编程思想的一种方式!
TransactionManager
TransactionManager,这个我们经常在Spring里面进行配置吧,事务大管家!
UserAccountDao、UserOrderDao
这里通过这2个DAO,想模拟一个事务中账户购买、下单2个操作。
UserService
到这里,可以清晰的看到Spring事务管理的一个缩影了吧!
Test
这里,主要是模拟Spring的注入以及多用户并发请求。
运行结果
你可以发现,一个线程中的一个事务的多个操作,使用的是同一Connection!
好了,到这里,你是否能对Spring实现事务的思想有所了解呢?
感谢您的阅读,也欢迎您发表关于这篇文章的任何建议,关注我,技术不迷茫!小编到你上高速。
· END ·
最后,关注公众号互联网架构师,在后台回复:2T,可以获取我整理的 Java 系列面试题和答案,非常齐全。
正文结束
推荐阅读 ↓↓↓
1.不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
2.如何才能成为优秀的架构师?
3.从零开始搭建创业公司后台技术栈
4.程序员一般可以从什么平台接私活?
5.37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
6.IntelliJ IDEA 2019.3 首个最新访问版本发布,新特性抢先看
7.这封“领导痛批95后下属”的邮件,句句扎心!
8.15张图看懂瞎忙和高效的区别!
面试官:说说 Spring 事务设计原理?面试必问!相关推荐
- 面试官: 讲讲 Spring 事务有哪些坑?
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 引言 今天,我们来讲 Spring 中和事务有关的考题. ...
- 面试官:Spring事务的传播行为有几种?
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:程序员入职国企,1周上班5小时,晒出薪资感叹:腾讯当CEO也不去个人原创+1博客:点击前往,查看更多 在Spri ...
- 面试官:Spring事务失效的场景有哪些?如何解决?
作者:溪~源 blog.csdn.net/xuan_lu/article/details/107797505 实际项目开发中,如果涉及到多张表操作时,为了保证业务数据的一致性,大家一般都会采用事务机 ...
- 面试官:Spring 用了哪些设计模式?说三种即可 = =
面试官:Spring 用了哪些设计模式?说三种即可 = = 转载:https://mp.weixin.qq.com/s/LGD54XaK4RmhZHxtU0BADg 转载理由:还可以
- 面试官:说一下HashMap原理,循环链表是如何产生的
Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据.众所周知 HashMap 底层是基于 数组 + 链表 组成的,不过在 JDK1.7 和 1.8 中具体实现稍有 ...
- 面试官:spring boot和spring究竟有啥区别?
面试官:spring boot和spring究竟有啥区别? 前言 今天本篇文章主要聚焦说说,spring boot和spring究竟有啥区别,重点对比MVC模块以及Security模块在两大框架使用时 ...
- Spring合集篇|面试官:Spring都讲不明白,自己走还是我送你?
spring合集|面试官:Spring都讲不明白,自己走还是我送你? 更多合集: B站主页 更多学习资料免费领取.
- 从面试官的角度谈谈大数据面试
作者:大叔据 来源:大叔据 关于传授面试经验的文章太多了,眼花缭乱,我这里就不谈了,点进来想获取几吨面试学习资料的同学,抱歉让你失望了.(我是真的找不到那么多资料...).所以,今天我们只聊面试官. ...
- 从面试官角度看iOSer应该如何面试
黑客技术 点击右侧关注,了解黑客的世界! Java开发进阶 点击右侧关注,掌握进阶之路! Python开发 点击右侧关注,探讨技术话题! 作者丨Maru 链接: https://www.jianshu ...
- 【手写系列】透彻理解Spring事务设计思想之手写实现
事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败.事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Dura ...
最新文章
- 说一说activity
- 【怎样写代码】偷窥高手 -- 反射技术(七):通过反射实例化对象
- oracle cpu分配,CPU 分配 - Oracle VM Server for SPARC 2.0 管理指南
- Python 的 time 模块导入及其方法
- MS SQL入门基础:删除数据
- Mybatis 实现SQL拦截并在控制台打印SQL和参数
- 正则去除包裹的大括号
- 年底跳槽,都去哪儿?数万从业者的新选择即将揭幕
- [胡思乱想]网络游戏与社会资源公平分配
- JQuery 制作消息弹出框、按钮点击音效
- Layui 的内置jquery 版本
- 号外:中国雅虎相册即将关闭原图下载 请网友及时备份
- 【FND】EBS中Java并发程序开发
- [bzoj3998]弦论
- Home Assistant 入门安装
- SAP WRITE设置列表颜色 页眉页尾输出控制
- 【DPABI教程】DPARSF详细教程笔记
- 朋友圈广告投放优势及广告投放案例分享
- 先调用finish() 然后startActivity有什么区别?
- php简单富文本,JavaScript_Javascript实现简单的富文本编辑器附演示,复制代码 代码如下: span styl - phpStudy...
热门文章
- Chrome浏览器Network面板http请求时间分析
- 《Linux》美轮美奂的Arch, 详解Arch虚拟机安装
- iOS开发-当APP涉及到用户敏感信息适配Xcode9及(ios11)
- Mysql——数据查询
- [Unity3D]Unity3D圣骑士当游戏开发商遭遇Mecanim动画系统
- 关于hive和spark日志问题
- Mysql 慢查询和慢查询日志分析
- Illustrator 教程,如何在 Ai 中创建一个新文档?
- Safari 搜寻引擎被 Yahoo 绑架,试试这 4 种解决方法
- iOS开发字符串倒序,倒序单词字母,不倒序单词位置