透彻理解Spring事务设计思想之手写实现
事务,是描述一组操作的抽象,比如对数据库的一组操作,要么全部成功,要么全部失败。事务具有4个特性:Atomicity(原子性),Consistency(一致性),Isolation(隔离性),Durability(持久性)。在实际开发中,我们对事务应用最多就是在数据库操作这一环,特别是Spring对数据库事务进行了封装管理。Spring对事务的支持,确实很强大,但是从本质上来讲:事务是否生效取决数据库底层是否支持(比如MySQL的MyISAM引擎就不支持事务,Spring能奈何!),同时一个事务的多个操作需要在同一个Connection上。事务也往往是在业务逻辑层来控制。本篇博客将通过手写一个Demo来分析Spring事务底层到底是如何帮助我们轻松完成事务管理的!
先来看一眼工程结构:
工程结构
ConnectionHolderConnectionHolder
在Spring中,有时候我们是不是要配置多个数据源DataSource?很显然,Spring需要通过DataSource来得到操作数据库的管道Connection,这有点类似于JNDI查找。
这里通过ConnectionHolder类来完成这个过程,需要思考的是在多线程下,这显然是存在问题的。为避免多线程问题,难道我们采用线程安全的Map,比如ConcurrentHashMap,其实我们真正的目的是什么?是保证一个线程下,一个事务的多个操作拿到的是一个Connection,显然使用ConcurrentHashMap根本无法保证!
Spring很聪明,她提供了一种思路,来解决,看下面的代码!
SingleThreadConnectionHolderSingleThreadConnectionHolder
本来线程不安全的,通过ThreadaLocal这么封装一下,立刻就变成了线程的局部变量,不仅仅安全了,还保证了一个线程下面的操作拿到的Connection是同一个对象!这种思想,确实非常巧妙,这也是无锁编程思想的一种方式!
TransactionManagerTransactionManager
TransactionManager,这个我们经常在Spring里面进行配置吧,事务大管家!
UserAccountDao、UserOrderDaoUserAccountDao
UserOrderDao
这里通过这2个DAO,想模拟一个事务中账户购买、下单2个操作。
UserServiceUserService
到这里,可以清晰的看到Spring事务管理的一个缩影了吧!
Test测试
这里,主要是模拟Spring的注入以及多用户并发请求。
运行结果你可以发现,一个线程中的一个事务的多个操作,使用的是同一个Connection!
好了,到这里,你是否能对Spring实现事务的思想有所了解呢?
原文发布时间为:2018-09-12
本文作者:张丰哲
本文来自云栖社区合作伙伴“ java进阶架构师”,了解相关信息可以关注“ java进阶架构师”。

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
类脑计算:让人工智能走得更远
像人一样思考,这是人们对人工智能和机器人的期待。大踏步前进的人工智能,似乎走到了十字路口。 “机器综合智能水平和人脑相差较大,机器学习需要较多人工干预,不同人工智能模态之间交互协同较少……”近日,在香港召开的第S43次香山科学会议上,与会科学家细数当前人工智能发展面临的瓶颈。 解铃还须系铃人,人工智能的发展也不例外。科学家意识到,想要走得更远,人工智能还要回到出发的地方,那便是人类智能。 丨神经科学提供基础 “以深度学习为代表的机器学习方法在视听觉感知等具体问题上媲美甚至超越人类的水平。”会议报告中,作为一名神经科学家,中科院神经科学所研究员蒲慕明院士为人工智能在过去几十年的发展点赞。不过,他同时看到,与人脑的学习能力相比,机器学习在可解释性、推理能力、举一反三能力等方面存在明显差距。 让机器向人学习,是提升“智能”水平的重要方向。会议执行主席、香港科技大学副校长叶玉如院士指出:“目标是在多个层面,理论上模拟大脑的机制和结构,开发一个更具有普遍性的AI以应对包括多任务、自学习和自适应等方面的挑战。” “受脑启发”是人工智能最重要的发展方向。近年来,脑科学研究正在从传统的认识脑、了解脑向...
- 下一篇
赠票|科技开放三年,蚂蚁金服将在ATEC科技大会上交出怎样的答卷
小蚂蚁说: 1999年9月,一个名为“72小时网络生存测试”的实验在北京举行,4名志愿者走进了北京的保利大厦,他们分别被关进单独的房间,没有吃的,没有饮用水,也没有被褥,只有一台连接网络的电脑,还有1500元的现金和电子货币。结果是他们在网上几乎找不到几家店,整日只能喝豆浆吃油条,几乎无法生存。 而近20年后今天的现状却是,在北京,在杭州,离开网络,你便无法正常生活。 在当年,如果你听到一个人跟你聊互联网,聊计算机,说20年后的一天你可以不带纸币就可以生活,你一定会认为这是天方夜谭,可有的人却意识到了这会是未来。 前言 二十年前,看到未来的人将它变成了今天的现实;二十年后,旧的故事还在继续,新的故事已经开始上演。蚂蚁金服将在本月的云栖大会ATEC上带你去看金融科技的未来。 蚂蚁金服ATEC在云栖大会 2017年10月,以“飞天.智能”为主题的云
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS8编译安装MySQL8.0.19
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- CentOS7安装Docker,走上虚拟化容器引擎之路
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池