Spring 本地事务
主要原理:
事务的顶层接口:
PlatformTransactionManager
提供了3个方法,在申明式事务中这3个方法都是通过aop 调用的: 1.getTransaction:

进入相关需要被拦截的方法,aop调用getTransaction, 该方法检查ThreadLocal 是否已经绑定了Transaction ,如果没有就直接new 一个Transaction,并设置connection 和其它初始参数。
2.doCommit doRollback
业务方法执行结束后(正常结束或者抛异常)后,由拦截器执行该方法。
关键点: 1.Spring事物管理器进行了上层抽象,我们可以以jdbc 的DataSourceTransactionManager 事物管理器为切入点,观察代码是如何实现的。 DataSourceTransactionObject 事物是如何绑定到ThreadLoacal的:


3.事物传播策略如何实现的:

以 PROPAGATION_REQUIRES_NEW 为例来说,
如果当前线程已经绑定了事物,那么是如何实现新开一个事物的呢? 首先将就是将旧的事物暂停supend(), 具体的暂停过程是讲旧的事物和线程解绑,然后新建一个事物,新的事物执行完毕后,再将旧的事物和线程绑定。
这个过程就是借助DefaultTransactionStatus 来实现的,该类里面有两个关键属性:当前事物,挂起的事物。

4. DataSourceTransactionManager 是基于线程实现的, spring-webflux 中是不支持DataSourceTransactionManager 事物管理的。
Spring 本地事务的更多相关文章
- 如何实现XA式、非XA式Spring分布式事务
		
Spring应用的几种事务处理机制 Java Transaction API和XA协议是Spring常用的分布式事务机制,不过你可以选择选择其他的实现方式.理想的实现取决于你的应用程序使用何种资源,你 ...
 - 非XA式Spring分布式事务
		
Spring应用的几种事务处理机制 Java Transaction API和XA协议是Spring常用的分布式事务机制,不过你可以选择选择其他的实现方式.理想的实现取决于你的应用程序使用何种资源,你 ...
 - 开涛spring3(9.2) - Spring的事务 之 9.2 数据库事务概述
		
9.2.1 概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口 PlatformTransactionManager,从而能支持 ...
 - 开涛spring3(9.1) - Spring的事务 之 9.1 数据库事务概述
		
9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...
 - Spring的事务 之 9.1 数据库事务概述 ——跟我学spring3
		
9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...
 - Spring分布式事务实现概览
		
分布式事务,一直是实现分布式系统过程中最大的挑战.在只有单个数据源的单服务系统当中,只要这个数据源支持事务,例如大部分关系型数据库,和一些MQ服务,如activeMQ等,我们就可以很容易的实现事务. ...
 - Spring框架事务支持模型的优势
		
全局事务 全局事务支持对多个事务性资源的操作,通常是关系型数据库和消息队列.应用服务器通过JTA管理全局性事务,API非常烦琐.UserTransaction通常需要从JNDI获取,意味着需要与JND ...
 - 跟我学Spring3(9.1):Spring的事务之数据库事务概述
		
原文出处: 张开涛 9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致 ...
 - 跟我学Spring3(9.2):Spring的事务之事务管理器
		
原文出处: 张开涛9.2.1 概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口PlatformTransactionManage ...
 
随机推荐
- LeetCode 294. Flip Game II
			
原题链接在这里:https://leetcode.com/problems/flip-game-ii/ 题目: You are playing the following Flip Game with ...
 - Mybatis-Plus select不列出全部字段
			
https://www.jianshu.com/p/e97b8236db67 只显示某两个字段 @Test public void selectByWrapper10() { QueryWrapper ...
 - 25 | MySQL是怎么保证高可用的?
			
在上一篇文章中,我和你介绍了binlog的基本内容,在一个主备关系中,每个备库接收主库的binlog并执行. 正常情况下,只要主库执行更新生成的所有binlog,都可以传到备库并被正确地执行,备库就能 ...
 - 九.配置SMB共享(Samba共享)
			
• Samba 软件项目 – 用途:为客户机提供共享使用的文件夹 – 协议:SMB(TCP 139).CIFS(TCP 445) • 所需软件包:samba • 系统服务:smb 管理共享账号 ...
 - Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门
			
Linux FC/iSCSI存储设备管理系列(一):Linux系统设备驱动入门 转载请在文首保留原文出处:EMC中文支持论坛 - https://community.emc.com/go/chines ...
 - CSP初赛复习
			
初赛复习 初赛一定要过啊,否则付出的那么多都白搭了! while(1) ++csp.rp,++csp.luck,++csp.scores; 历史 2020年开始,除NOIP以外的NOI系列其他赛事(包 ...
 - Xmind8安装
			
现在新版安装极其简单.是deb安装包Xmind8安装小书匠 kindle 参照官网安装方法,在此记录下来,方便自己查找. 流程: 55ccaad0655d256ac5fb9fea8aa8569d.pn ...
 - 解决Ubuntu19.04无法安装SecureCRT
			
推荐下载SecureCRT的tar包 在ubuntu19.04上安装SecureCRT的时候,报错libssl1.0.0-xxx没有安装 解决办法:下载并安装libssl1.0.0_1.0.1t-1+ ...
 - TCP四次握手断开连接
			
建立连接非常重要,它是数据正确传输的前提:断开连接同样重要,它让计算机释放不再使用的资源.如果连接不能正常断开,不仅会造成数据传输错误,还会导致套接字不能关闭,持续占用资源,如果并发量高,服务器压力堪 ...
 - Spring Cloud Gateway(三):网关处理器
			
1.Spring Cloud Gateway 源码解析概述 API网关作为后端服务的统一入口,可提供请求路由.协议转换.安全认证.服务鉴权.流量控制.日志监控等服务.那么当请求到达网关时,网关都做了哪 ...
 
			
		