孙哥Spring源码第29集

news2024/12/23 13:19:03

第29集 解析事务属性中的传播属性
【视频来源于:B站up主孙帅suns Spring源码视频】【微信号:suns45】

1、事务属性有哪些?

  • 1、事务属性
  • 2、传播属性
  • 3、只读属性
    • 设置事务为只读,提高事务运行的效率 false
  • 4、超时属性
    • 超时属性 通过超时属性 设置本事务 最长一个等待时间 -1 由数据库底层决定 等待时间
  • 5、异常属性
    • RuntimeException 及其子类 默认回滚
    • Exception 及其子类 默认提交

2、请详细介绍下传播属性

为了解决传播属性 PROPAGATION 事务嵌套问题出现了传播属性
1. REQUIRED                    当前的这个业务方法  外部没有事务 开启事务   外部存在事务 则融合
2. REQUIRED_NEW         当前的这个业务方法  外部没有事务 开启事务   外部存在事务 挂起外部事务,开启新的事务,执行完新的事务,在还原外部事务继续执行
3. MANDATORY                 当前的这个业务方法 外部必须存在事务
4. NEVER                           当前的这个业务方法 外部一定不能存在事务  
5. SUPPORTS                    当前的这个业务方法  外部没有事务 则不开启事务,外部存在事务 则融合
6. NOT_SPPORTED          当前的这个业务方法  外部没有事务 则不开启事务,外部存在事务 抛异常
7. NESTED                         内嵌事务 SavePoint
image-20230519080710618

3、Spring对于事务属性底层 如何来实现 事务属性 所产生的效果呢?

ISOLATION READONLY TIMEOUT Spring 底层没有实现

4、ISOLATION READONLY TIMEOUT Spring的底层没有实现 谁实现了这3个事务属性呢?

  • JDBC 规范决定 ----> 驱动完成
    • conn.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED);
    • conn.setReadOnly(true);
    • conn.setNetworkTimeout();

5、Spring实现的有那些属性?

异常属性

1. try(RE E  instanceof RuntimeException Exception )
       conn.commit conn.rollback

传播属性

2. Spring实现 追源码的方式

6、Spring声明式事务AOP

第一个要注意的

  • 1、一定应用了代理【JDK或者Cglib】
  • 2、Spring在整理代理的过程中,它实际上是基于BeanPostProcessor,就是前面讲的AOP源码意识到的

第二个要注意的

  • 所谓的spring单机版事务 一定是依附于连接池 进而通过 连接的这些操作来控制事务,最后spring会把连接绑定在ThreadLocal当中

第三个要注意的

  • 1、JDBC和Mybatis都是依附于 DataSourceTransactionManager实现的是(PlatformTransactionManager接口)
  • 2、需要TransactionAttributes

7、基于注解讲解,剖析思路

1、BeanPostProcessor 创建代理
2、调用Service.xxx方法过程中 动态在运行时 原始功能+事务额外功能 整合在一起

8、EnableTransactionManagement解析

TransactionManagementConfigurationSelector解析

  • 1、截图EnableTransactionManagement
  • 2、查看属性含义【注意Order和Mode】
  • 3、@Import(TransactionManagementConfigurationSelector.class)
  • 4、查看TransactionManagementConfigurationSelector
    • 4.1、case Proxy,不用看ASPECTJ
    • 4.2、AutoProxyRegistrar是干什么的?AutoProxyRegistar 是一个ImportBeanDefinitionRegistrar
    • 4.3、ProxyTransactionManagementConfiguration是干什么的?ProxyTransactionManagementConfiguration是解析事务属性
      • 1、Advisor或者是Interceptor
      • 2、有advice ->TranactionManager
      • 3、transactionAttrbiutes 事务属性
  • 5、总结
    • image-20230519081527225

AutoProxyRegistrar解析

image-20230519081803908

调用AOPConfigUtils来处理注册处理事务的切面的BeanDefinition

image-20230519081709387

ProxyTransactionManagementConfiguration解析

image-20230519082036563

userService.register(user)的整个运行过程

image-20230519082134167

第29集学习目标

1、EnableTransactionManagement解析过程

  • @Import(TransactionManagementConfigurationSelector.class)
    • ProxyTransactionManagementConfiguration作用:创建切面,注册切面
    • AutoProxyRegistrar:作用注册BeanPostProcessor【InfrastructureAdvisorAutoProxyCreator】,获取切面,获取原始对象,创建代理。

2、@Transactional这个注解是怎么生效的呢是怎么创建代理的呢?

在执行BeanPostPrcessor执行到了InfrastructureAdvisorAutoProxyCreator这个BeanPostProcessor的beanPostProcessorAfter创建代理的时候,它会去检查当前方法或者当前类有没有@Transactional注解,有这个注解的话就会创建代理。在代理执行方法的时候会检查这个方法有没有这个注解,如果有这个注解才会进行代理事务的处理。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1205146.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一、认识微服务

目录 一、单体架构 二、分布式架构 三、微服务 1、微服务架构特征: 1.单一职责: 2.面向服务: 3.自治: 4.隔离性强: 2、微服务结构: 3、微服务技术对比: 一、单体架构 二、分布式架构 三…

UITableView的style是UITableViewStyleGrouped

一般情况下,UITableViewStylePlain和UITableViewStyleGrouped是UITableView常用到的style, 之前都是用到的时候,遇到问题直接用度娘,差不多就够用了,今天在修复UI提出的间隙问题,来回改,总觉得…

Rust-使用dotenvy加载和使用环境变量

系统的开发,测试和部署离不开环境变量,今天分享在Rust的系统开发中,使用dotenvy来读取和使用环境变量。 安装 cargo add dotenvy dotenv_codegen 加载环境变量 use dotenvy::dotenv;fn main() {dotenv().expect(".env不存在");…

[WSL] 安装hive3.1.2成功后, 使用datagrip连接失败

org.apache.hadoop.ipc.RemoteException:User: xxx is not allowed to impersonate anonymous 下载driver-hive-jdbc-3.1.2-standalone 解决 修改hadoop 配置文件 etc/hadoop/core-site.xml,加入如下配置项 <property><name>hadoop.proxyuser.你的用户名.hosts…

李开复:未来AI或助力中国成为科技“火车头”

原创 | 文 BFT机器人 6月22日&#xff0c;创新工场的董事长兼首席执行官李开复&#xff0c;受邀在一场峰会上发表演讲&#xff0c;主题为《AI的飞奔时代》。 中国真的能成为AI超级强国吗&#xff1f; 李开复在演讲上盘点过去&#xff0c;展望未来&#xff0c;分析了过去几年中…

优秀智慧园区案例 - 珠海华发智慧园区,万字长文解析先进智慧园区建设方案经验

一、项目背景 珠海华发产业园运营管理有限公司&#xff08;简称“产业园公司”&#xff09;是2016年起连续五年跻身“中国企业500强”、国务院国企改革“双百企业”的珠海华发集团旗下的实体产业发展载体运营平台&#xff0c;依托“四园一基地”&#xff1a;中以国际产业园、信…

CTFhub-RCE-文件包含

访问网站 我们仔细看一下php代码&#xff0c;重点是 if (!strpos($_GET["file"], "flag")) { include $_GET["file"]; 这里有一个strpos(string,find,start)函数 意思在string字符串中找find的位置,start是查找的开始位置 那么这句代…

azkaban的安装

一、下载上传文件 二、创建目录 mkdir /opt/soft/azkaban 三、解压 tar -zxvf /opt/install/azkaban-db-3.84.4.tar.gz -C /opt/soft/azkaban tar -zxvf /opt/install/azkaban-exec-server-3.84.4.tar.gz -C /opt/soft/azkaban tar -zxvf /opt/install/azkaban-web-server-…

DALLE 2 文生图模型实践指南

前言&#xff1a;最近在运行dalle2模型进行推断&#xff0c;本篇博客记录相关资料。 相关博客&#xff1a;超详细&#xff01;DALL E 文生图模型实践指南 目录 1. 环境搭建和预训练模型准备环境搭建预训练模型下载 2. 代码3. BUG&DEBUGURLErrorRuntimeErrorCUDA error 1. …

【C语言 | 指针】C指针详解(经典,非常详细)

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

这样书写Python代码的方式,实在是太优雅了~

文章目录 前言一、在Python中配合pipe灵活使用链式写法二 、pipe中常用的管道操作函数1.使用traverse()展平嵌套数组2.使用dedup()进行顺序去重3.使用filter()进行值过滤4.使用groupby()进行分组运算5.使用select()对上一步结果进行自定义遍历运算6.使用sort()进行排序 总结关于…

thinkphp8 多级控制器调用

在使用这个目录的时候正常访问时 http://tp.com/index.php/user2.login/index, 这个多级目录时不允许使用的&#xff0c;想要使用就的使用路由 在route/app.php 里面配置&#xff1a;Route::get(user2/login,user2.Login/index); 第一个参数时外部访问参数&#xff0c;第二个是…

Android权限动态申请(包括悬浮窗)

目录 效果图 一、环境配置 二、新建工具类 三、开始使用 备注&#xff08;一&#xff09;&#xff1a;用户手动设置权限 手动设置效果图 备注&#xff08;二&#xff09;&#xff1a;在Fragment中如何调用动态权限申请 备注&#xff08;三&#xff09;&#xff1a;悬浮窗…

SDL2 显示文字

1.简介 SDL本身没有显示文字功能&#xff0c;它需要用扩展库SDL_ttf来显示文字。ttf是True Type Font的缩写&#xff0c;ttf是Windows下的缺省字体&#xff0c;它有美观&#xff0c;放大缩小不变形的优点&#xff0c;因此广泛应用很多场合。 使用ttf库的第一件事要从Windows的…

【leetcode】8.字符串转换整数

题目 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃无用的前导空格 检查下一个字符&#xff08;假设还未…

【文末送书】深入浅出嵌入式虚拟机原理

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码

基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于回溯搜索算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于回溯搜索优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要&#xff1a;针对PNN神…

二维码智慧门牌管理系统升级解决方案:数据可视化助力运营精准决策

文章目录 前言一、升级版二维码智慧门牌管理系统的特点二、数据可视化助力运营精准决策 前言 随着科技的不断进步&#xff0c;传统的门牌管理系统已经无法满足现代社会的需求。为了提高管理效率&#xff0c;减少人力成本&#xff0c;我们引入了升级版的二维码智慧门牌管理系统…

[PyTorch][chapter 62][强化学习-基本概念]

前言&#xff1a; 目录&#xff1a; 强化学习概念 马尔科夫决策 Bellman 方程 格子世界例子 一 强化学习 强化学习 必须在尝试之后&#xff0c;才能发现哪些行为会导致奖励的最大化。 当前的行为可能不仅仅会影响即时奖赏&#xff0c;还有影响下一步奖赏和所有奖赏 强…

如何应对招聘中的职业性格测评?

很多同学听说要做性格测试&#xff0c;第一反应是如何让自己的性格让HR看起来更好....没办法为了顺利入职&#xff0c;咱不能老实作答&#xff0c;因为性格测评搞不好是真刷人的&#xff0c;刷人的&#xff08;无视你的专业能力和笔试成绩&#xff09;..... 可是....很多性格测…