spring-tx核心接口

news/2024/7/3 18:39:32/文章来源:https://www.cnblogs.com/use-D/p/18279133

spring-tx,即Spring Framework的事务管理模块,提供了对各种事务API的抽象,包括JDBC、JPA、Hibernate等。Spring事务管理的核心是PlatformTransactionManager接口,它为应用程序提供了统一的事务管理方式,无论是声明式还是编程式事务管理。

以下是spring-tx源码中的一些重点概念和组件:

PlatformTransactionManager

PlatformTransactionManager是Spring事务管理的核心接口,它定义了开始、提交、回滚事务的基本操作。具体实现类负责与不同的事务API进行交互。

TransactionDefinition

TransactionDefinition接口定义了事务的属性,如传播行为、隔离级别、超时时间和只读标志等。

TransactionStatus

TransactionStatus接口提供了关于当前事务状态的信息,如是否新事务、是否已提交或回滚等。

TransactionInterceptor

TransactionInterceptor是Spring AOP中用于事务管理的切面。它通过TransactionAttributeSource获取事务属性,并通过PlatformTransactionManager管理事务的生命周期。

TransactionAttributeSource

TransactionAttributeSource用于决定方法调用上的事务属性。通常与@Transactional注解一起工作,根据方法签名来决定事务属性。

TransactionAspectSupport

TransactionAspectSupport是一个工具类,用于在AOP切面中支持事务管理,它包含了事务的开始、提交和回滚的逻辑。

DataSourceTransactionManager

DataSourceTransactionManagerPlatformTransactionManager的一个具体实现,用于基于DataSource的事务管理,如JDBC和JPA。

JpaTransactionManager

JpaTransactionManager是另一个PlatformTransactionManager的实现,专门用于JPA事务管理。

HibernateTransactionManager

HibernateTransactionManager用于管理Hibernate的事务,它也是PlatformTransactionManager的一个实现。

事务传播行为

事务传播行为定义了方法调用中事务应该如何交互。Spring支持七种传播行为,包括REQUIREDSUPPORTSMANDATORYREQUIRES_NEWNOT_SUPPORTEDNEVERNESTED

源码中的关键流程

  1. 事务配置解析:Spring通过TxNamespaceHandlerTxAdviceBeanDefinitionParser解析XML或注解中的事务配置,生成TransactionInterceptor的定义。

  2. 事务拦截器:当有方法调用时,AOP会拦截方法调用,通过TransactionInterceptor决定是否需要开启事务,以及事务的属性。

  3. 事务开始和结束:TransactionInterceptor调用PlatformTransactionManagergetTransaction方法开始事务,然后在方法正常结束或抛出异常时调用commitrollback方法。

  4. 异常处理:Spring事务管理支持特定的异常回滚规则,可以通过TransactionAttributerollbackOn属性来指定。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【github报错解决】Failed to connect to github.com port 443: Couldnt connect to server

今天使用github push时候报错的 解决办法: 1、查看本机代理 路径:设置->网络和Internet->代理->地址:端口 2、用git cmd修改配置,port就用刚刚代理端口值git config --global http.proxy http://127.0.0.1:[port] git config --global https.proxy http://127.0.0…

LVGL组件

LVGL组件的使用 目录LVGL组件的使用1 . 父和子对象2. 部件的基本属性及设置3. 图解:还有其他样式可以设置2. 组件分类 1 . 父和子对象2. 部件的基本属性及设置 /******** 设置打小 ********/ /******** 注意:设置部件位置时,坐标原点在父对象的左上角 ********/ lv_…

Maven 笔记

开发工具:Maven相关内容笔记# Maven简介 Maven的本质是一个项目管理工具,将项目开发和管理过程抽象成一个项目对象模型(POM)) 这玩意儿是使用Java开发的,所以采用的就是Java的思想:面向对象 POM (Project Object Model):项目对象模型Maven的作用:项目构建:提供标准的、…

202406月度小结

这个学期比上个学期有意思得多了。但是为什么我只写了6月小结,没有写3月4月5月小结呢?因为那时候还没有想到用博客写这种小结形式的随笔啦…… 横向对比,这四个月都挺有意思的。但是由于我太容易忘记事情了……我的记忆是有限的,先把6月发生的趣事赶紧记录下来比较好。 昨天…

大模型技术方向Task1笔记

赛题概要 一、赛事背景 在当今数字化时代,企业积累了丰富的对话数据,这些数据不仅是客户与企业之间交流的记录,更是隐藏着宝贵信息的宝库。在这个背景下,群聊对话分角色要素提取成为了企业营销和服务的一项重要策略。 群聊对话分角色要素提取的理念是基于企业对话数据的深度…

[LeetCode] 122. Best Time to Buy and Sell Stock II

medium是你的谎言. class Solution:def maxProfit(self, prices: List[int]) -> int:#1if len(prices) == 1:return 0#elsemax_profit = 0min_price = prices[0]for i, element in enumerate(prices):#find a min_price if element <= min_price:min_price = elementelse…

【esp32 学习笔记】esp-idf学会调用组件管理——以button

简单不看版——esp-idf组件管理步骤 在ESP-IDF 组件管理器网页(https://components.espressif.com/)搜索我们需要的组件,比如【button】,然后 点开相应的组件,比如 espressif/button 组件。 【关键步骤】复制相关组件界面上配置组件的命令 ,形如:idf.py add-dependency &…

idea创建javaweb项目

1.新建project项目 2.添加依赖<dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>6.0.10</version> </dependency>…

Linguistics-English-Would, Should, and Could: How to Use Them Correctly

https://7esl.com/would-should-could/ Key Takeaways“Would” is used for hypotheticals and future possibilities that may not occur. “Should” implies advice, expectation, or probability. “Could” expresses past ability or present possibility.Home Knowled…

[LeetCode] 121. Best Time to Buy and Sell Stock

想清楚了确实算是简单题. class Solution:def maxProfit(self, prices: List[int]) -> int:#1if len(prices) == 1:return 0#elsemax_profit = 0min_price = prices[0]for i, element in enumerate(prices):if element <= min_price:min_price = elementelif element - m…

Druid数据库加密实现

Druid数据库连接池中的密码加密功能提供了以下几个主要好处: 增强安全性:最显著的好处是提高了数据库系统的安全性。明文存储数据库密码容易造成安全隐患,一旦配置文件泄露,数据库可能遭受未授权访问。通过加密数据库密码,即使配置文件落入未经授权的人员手中,他们也无法…

17-移动端适配

移动端适配01 单位的分类02 相对单位相对的对象 2.1 em 永远都是相对于自身的font-size <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, …

maven下载安装配置

Maven 是一款为 Java 项目管理构建、依赖管理的工具(软件),使用 Maven 可以自动化构建、测试、打包和发布项目,大大提高了开发效率和质量。 Maven的两大核心作用: 1.依赖管理: Maven 可以管理项目的依赖,包括自动下载所需依赖库、自动下载依赖需要的依赖并且保证版本没有…

回溯

理论基础 什么是回溯法回溯法也可以叫做回溯搜索法,它是一种搜索的方式。 在二叉树系列中,我们已经不止一次,提到了回溯,例如二叉树:以为使用了递归,其实还隐藏着回溯 (opens new window)。 回溯是递归的副产品,只要有递归就会有回溯。 所以以下讲解中,回溯函数也就是递…

day02 go的数据类型和运算符

day02 go的数据类型和运算符 前言动态语言类型 自动开辟数据空间,自动识别数据类型 python 静态语言类型 开辟内存空间,定义数据类型 c,java,gogo 语言中的数据类型 /*- go 基本数据类型:- 布尔类型- 数值类型- 整型 :- 有符号:int,int8,int16,int32,int64.- 无符号:ui…

16-视口的理解

视口的理解01 布局视口和视觉视口02 理想视口<meta name="viewport" content="width=device-width, initial-scale=1.0"> 通过width=device-width 即布局视口的宽度等于设备的宽度,以此来达到效果视口中的其它值

《痞子衡嵌入式半月刊》 第 103 期

痞子衡嵌入式半月刊: 第 103 期这里分享嵌入式领域有用有趣的项目/工具以及一些热点新闻,农历年分二十四节气,希望在每个交节之日准时发布一期。 本期刊是开源项目(GitHub: JayHeng/pzh-mcu-bi-weekly),欢迎提交 issue,投稿或推荐你知道的嵌入式那些事儿。 上期回顾 :《…

EasyDesktop 浏览器书签管理从未如此简单

作为一名软件开发从业人员, 每天80%的时间都在与浏览器打交道, 一半的时间在用浏览器开发调试, 另一半时间则是在互联网上搜寻各种知识和资源. 为此, 我的浏览器书签栏存储和很多非常棒的链接, 多到2k屏幕分辨率下一栏都放不下, 为此我只好把这些书签的名称改的短一点, 这样就能…

docker基本介绍

虚拟机的部署形式 一个物理机可以部署多个app 每个app独立运行在一个VM虚拟机里面 依然部署很慢 迁移和扩展可以使用VM的克隆 每一个虚拟机都是一个完整的操作系统,虚拟机多的时候,操作系统本身资源也就被消耗过多 企业使用的虚拟化工具为:vmware esxi虚拟化工具 个人学习使…

新生题

MISC kongfu 用winhex打开压缩包,下拉到最后发现keybase64解密后发现是栅栏密码audio 打开发现是一个wav文件,用Audacity打开根据电平,得到01100010 01100001 01101011 01100100 01101111 01110010 二进制转字符进行md5加密Smtpbase64解码foremost 用foremost分解图片分解成…