主要原理:

事务的顶层接口:

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 本地事务的更多相关文章

  1. 如何实现XA式、非XA式Spring分布式事务

    Spring应用的几种事务处理机制 Java Transaction API和XA协议是Spring常用的分布式事务机制,不过你可以选择选择其他的实现方式.理想的实现取决于你的应用程序使用何种资源,你 ...

  2. 非XA式Spring分布式事务

    Spring应用的几种事务处理机制 Java Transaction API和XA协议是Spring常用的分布式事务机制,不过你可以选择选择其他的实现方式.理想的实现取决于你的应用程序使用何种资源,你 ...

  3. 开涛spring3(9.2) - Spring的事务 之 9.2 数据库事务概述

    9.2.1  概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口 PlatformTransactionManager,从而能支持 ...

  4. 开涛spring3(9.1) - Spring的事务 之 9.1 数据库事务概述

    9.1  数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...

  5. Spring的事务 之 9.1 数据库事务概述 ——跟我学spring3

    9.1  数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致性.隔离性和持久性 ...

  6. Spring分布式事务实现概览

    分布式事务,一直是实现分布式系统过程中最大的挑战.在只有单个数据源的单服务系统当中,只要这个数据源支持事务,例如大部分关系型数据库,和一些MQ服务,如activeMQ等,我们就可以很容易的实现事务. ...

  7. Spring框架事务支持模型的优势

    全局事务 全局事务支持对多个事务性资源的操作,通常是关系型数据库和消息队列.应用服务器通过JTA管理全局性事务,API非常烦琐.UserTransaction通常需要从JNDI获取,意味着需要与JND ...

  8. 跟我学Spring3(9.1):Spring的事务之数据库事务概述

    原文出处: 张开涛 9.1 数据库事务概述 事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务. 事务必需满足ACID(原子性.一致 ...

  9. 跟我学Spring3(9.2):Spring的事务之事务管理器

    原文出处: 张开涛9.2.1 概述 Spring框架支持事务管理的核心是事务管理器抽象,对于不同的数据访问框架(如Hibernate)通过实现策略接口PlatformTransactionManage ...

随机推荐

  1. 2019-2020-1 20199312《Linux内核原理与分析》第四周作业

    计算机和操作系统的法宝 计算机三个法宝 存储程序计算机.函数调用堆栈机制.中断 操作系统:中断中断上下文的切换--保护和恢复现场 进程上下文的切换. Linux源代码目录分析 arch目录:代码量庞大 ...

  2. mysql - InnoDB存储引擎 死锁问题( Deadlock found when trying to get lock; try restarting transaction )

    刚刚向数据库插入数据的时候出现了这么一段错误 Deadlock found when trying to get lock; try restarting transaction 主要原因(由于无法使 ...

  3. 【排序算法】冒泡排序(Bubble Sort)

    一.简介 冒泡排序(Bubble Sort)也是一种简单直观的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换, ...

  4. 42、扩展原理-ApplicationListener原理

    42.扩展原理-ApplicationListener原理 有三个事件 ContextRefreshedEvent.Test_Ext$1[source=我发布了一个事件].ContextClosedE ...

  5. python3 pyinstaller 图标改变不了的问题

    命令 pyinstaller -F ./test.py --noconsole --icon=test.ico 在使用后可能发现新生成的图标仍然为默认图标,有以下解决方案: 将生成的exe文件复制到另 ...

  6. python pillow 处理图片

    demo1 #打开图片,并随机添加一些椒盐噪声 from PIL import Image import numpy as np import matplotlib.pyplot as plt img ...

  7. 查看linux系统版本相关信息

    1.查看内核版本:cat /proc/version A机器 root@debian:~# cat /proc/version Linux version -- (ty@debian) ( (Debi ...

  8. Apache Flink - 常见数据流类型

    DataStream: DataStream 是 Flink 流处理 API 中最核心的数据结构.它代表了一个运行在多个分区上的并行流.一个 DataStream 可以从 StreamExecutio ...

  9. 解决微信小程序要求TLS版本不低于1.2问题

    客官,本文可在我的小站中看到哦 昨天项目服务器发生意外,其上的IIS服务无法使用,导致项目后台瘫痪,倒腾一番最终以无法修复告终,启用备用的服务器,从安装IIS环境开始,然后最后所有的东西都准备就绪,却 ...

  10. fdisk创立主分区过程

    [root@localhost ~]# fdisk /dev/sdb …省略部分输出… Command (m for help): p #显示当前硬盘的分区列表 Disk /dev/sdb: 21.5 ...