Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Spring对事务的支持

Spring对事务的支持

作者头像
吉林乌拉
发布于 2019-09-17 08:31:23
发布于 2019-09-17 08:31:23
5850
举报
文章被收录于专栏:吉林乌拉吉林乌拉

上几篇中我们主要介绍了有关数据库事务相关的知识,在这一篇中,我们将重点了解一下,在spring中是怎么对事务进行支持的。在其它的文章中我们知道spring DAO为了支持不同的持久化技术,于是提供了模板类的方式使之支持不同的持久化技术,那么spring的事务管理也是一样的,它也是采用了这种方式,于是就提供了 TransactionTemplate模板类。在spring中我们可以使用TransactionTemplate模板类,及事务回调TransactionCallback就可以通过编码的方式实现事务管理,并且无须关注资源获取、释放、事务同步和异常处理等操作。

spring事务管理的好处是声明式事务管理,也就是说可以通过IOC配置中指定边界和事务属性,这样spring会自动在指定的事务边界上应用事务属性。

在spring的事务管理中,主要有3个接口,他们分别是:PlatformTransactionManager、TransactionDefinition、TransactionStatus。他们3个具体的关联关系如下:

下面我们详细了解一下上面3个接口的具体作用。

TransactionDefinition:用户描述事务的隔离级别、超时时间、是否为只读事务和事务传播规则等控制事务具体行为的事务属性。PlatformTransactionManager根据TransactionDefinition提供的事务属性配置信息创建事务,并用TransactionStatus描述这个事务的激活事务的状态。在上面我们介绍过TransactionDefinition用来描述事务的相关属性,那么下面我们具体看一下在TransactionDefinition中都包括哪些事务属性。

  • 事务隔离:当前事务和其它事务的隔离程度。在TransactionDefinition中定义了和java.sql.Connection接口中一样的隔离级别:ISOLATION_READ_UNCOMMITTED、ISOLATION_READ_COMMITTED、ISOLATION_REPEATABLE_READ、ISOLATION_SERIALIZABLE。上面介绍的这些常量正好对应在其它文章中提到过的数据库的隔离级别。除此之外TransactionDefinition还包括默认的隔离级别ISOLATION_DEFAULT。它表示使用底层数据库的默认隔离级别。
  • 事务传播:在正常的情况下事务中执行的所有代码都会在一个事务中运行,但spring为我们提供了几种可选的事务传播类型:简单的参与到现有的事务中、或者挂起当前事务、或者创建一个新的事务。
  • 事务超时:事务在超时前能运行多久,超过时间后,事务将回滚。
  • 只读状态:因为只读事务不修改任何数据,所以在有只读操作时可以对只读事务做优化处理,提高运行性能。

TransactionStatus:TransactionStatus表示的是事务的具体运行状态。也就是通过TransactionStatus可以获取到事务运行期的状态信息,也可以通过该接口间接的回滚事务。这是因为该接口继承了SavepointManager,而SavepointManager接口又支持JDBC3.0中新增的保存点的分段事务控制能力。下面我们简单了解一下SavepointManager中所包括的方法。

  • Object createSavepoint():创建一个保存点对象,以保证事务可以支持回滚到保存点上,也可以调用releaseSavepoint()方法释放一个已经确定不用的保存点。
  • void rollbackToSavepoint(Object var1):将事务回滚到特定的保存点上,被回滚的保存点将自动释放。
  • void releaseSavepoint(Object var1):释放一个保存点,如果事务提交,那么所有的保存点都将释放。

除了上述已有的方法外,TransactionStatus还扩展了以下SavepointManager中没有的方法:

  • boolean hasSavepoint():判断当前事务是否创建了保存点。
  • boolean isNewTransaction():判断当前事务是否是一个新的事务,如果返回false则表示当前事务是一个已经存在的事务,或者当前操作未运行在事务环境中。
  • boolean isCompleted():判断当前事务是否已经结束,已经提交事务或者事务回滚都任务当前事务已经结束。
  • boolean isRollbackOnly():判断当前事务是否已经被标识为rollback-only。
  • void setRollbackOnly():将当前事务设置为rollback-only。通过该标识spring将此事务回滚。

PlatformTransactionManager:在其它的文章中使我们知道JDBC的事务只能提交或者回滚。在spring中PlatformTransactionManager的作用就是做上述功能的。下面我们看一下PlatformTransactionManager中的所涉及到的方法及其作用。

  • TransactionStatus getTransaction(TransactionDefinition var1):该方法根据事务定义的信息从事务环境中返回一个已存在的事务,或者创建一个新的事务,并用TransactionStatus记录这个事务的运行状态。
  • void commit(TransactionStatus var1):根据事务的状态提交事务,如果事务已经被标识为rollback-only,则该方法将执行回滚操作。
  • void rollback(TransactionStatus var1):将事务回滚,如果调用commit()方法抛出一异常时,则spring会默认调用rollback()方法。

上面我们介绍了spring中有关事务的主要接口,下面我们继续了解一下,在spring中这些接口的具体实现,实际上spring为不同的持久化技术都提供了不同的实现,相关的实现类如下:

spring就是通过这此实现类进而实现spring对事务的管理的,介绍了这么多,我们来看一下在spring中到底怎么用代码的方式也就是声明式事务管理。

这样我们的数据源就支持事务管理了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 吉林乌拉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Spring事务王国概览
如果整个事务处理过程中存在多个RM,那么就需要通过TP Monitor来协调多RM间的事务一致性。TP Monitor通过两阶段提交协议来确保整个事务的ACID属性。
大忽悠爱学习
2022/06/06
6580
Spring事务王国概览
Spring事务(下)
用来解决并发事务时出现的问题,其使用TransactionDefinition中的静态变量来指定
码农戏码
2021/03/23
9030
详解Spring的事务管理PlatformTransactionManager
Spring进行了统一的抽象,形成了PlatformTransactionManager事务管理器接口,事务的提交、回滚等操作全部交给它来实现。
名字是乱打的
2021/12/24
4K0
详解Spring的事务管理PlatformTransactionManager
Spring 事务管理
Spring 使用 PlatformTransactionManager 类来管理事务,根据不同的数据访问框架提供不同的实现,主要有下面这些API:
张云飞Vir
2021/12/06
4710
Spring事务的介绍,以及基于注解@Transactional的声明式事务
事务是一个非常重要的知识点,前面的文章已经有介绍了关于SpringAOP代理的实现过程;事务管理也是AOP的一个重要的功能。
@派大星
2023/07/15
4610
Spring事务的介绍,以及基于注解@Transactional的声明式事务
Spring源码解析(十一):spring事务配置类源码
AbstractPlatformTransactionManager,Spring提供的一个事务管理的基类,提供了事务管理的模板,实现了Spring事务管理的一个标准流程
Java微观世界
2025/01/21
2690
Spring源码解析(十一):spring事务配置类源码
Spring 事务管理详解
我们知道,在JavaEE的开发过程中,service方法用于处理主要的业务逻辑,而业务逻辑的处理往往伴随着对数据库的多个操作。以我们生活中常见的转账为例,service方法要实现将A账户转账到B账户的功能,则该方法内必定要有两个操作:先将A账户的金额减去要转账的数目,然后将B账户加上相应的金额数目。这两个操作必定要全部成功,方才表示本次转账成功;若有任何一方失败,则另一方必须回滚(即全部失败)。事务指的就是这样一组操作:这组操作是不可分割的,要么全部成功,要么全部失败
凯哥Java
2022/12/16
4830
Spring 事务管理详解
全面分析 Spring 的编程式事务管理及声明式事务管理
开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务。通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之。 先决条件 本教程假定您已经掌握了 Java 基础知识,并对 Spring 有一定了解。您还需要具备基本的事务管理的知识,比如:事务的定义,隔离级别的概念,等等。本文将直接使用这些概念而不做详细解释。另外,您最好掌握数据库的基础知识,虽然这不是必须。 系统需求 要试验这份教程中的工具和示例,硬件配置需求为:至少带有 512M
java达人
2018/01/31
7620
Spring 事务
关于理论性的内容,我在之前的一篇文章中介绍过,这里不再过多阐述,这里给出之前文章的链接:Spring 事务管理
希希里之海
2019/08/20
5810
Spring声明式事务、编程式事务一文打尽
关于数据库事务、锁可以先行查看此文:MySQL数据库读写锁示例详解、事务隔离级别示例详解。
青山师
2023/05/05
1.2K0
Spring声明式事务、编程式事务一文打尽
Spring5学习笔记Spring事务处理
我们系统的每个业务方法可能包括了多个原子性的数据库操作,比如下面的 save() 方法中就有两个原子性的数据库操作。这些原子性的数据库操作是有依赖的,它们要么都执行,要不就都不执行。
程序员Leo
2023/09/09
2480
Spring5学习笔记Spring事务处理
Spring 事务提交回滚源码解析
在上篇文章 Spring 事务初始化源码分析 中分析了 Spring 事务初始化的一个过程,当初始化完成后,Spring 是如何去获取事务,当目标方法异常后,又是如何进行回滚的,又或是目标方法执行成功后,又是怎么提交的呢?此外,事务的提交和回滚由底层数据库进行控制,而 Spring 事务行为可以传播,这个传播方式由 Spring 来进行控制,它是怎么控制的呢?这篇文章就来分析下 Spring 事务提交回滚的源码。
Java技术编程
2020/05/20
1.5K0
长文捋明白 Spring 事务!隔离性?传播性?一网打尽!
松哥最近正在录制 TienChin 项目视频~采用 Spring Boot+Vue3 技术栈,里边会涉及到各种好玩的技术,小伙伴们来和松哥一起做一个完成率超 90% 的项目,戳戳戳这里-->TienChin 项目配套视频来啦。 ---- 1. 什么是事务 2. Spring 中的事务 2.1 两种用法 2.2 三大基础设施 3. 编程式事务 4. 声明式事务 4.1 XML 配置 4.2 Java 配置 4.3 混合配置 5. 事务属性 5.1 隔离性 5.2 传播性 5.3 回滚规则 5.4 是否只读 5
江南一点雨
2022/09/15
8970
长文捋明白 Spring 事务!隔离性?传播性?一网打尽!
分布式事务之Spring事务与JMS事务(二)
Spring事务机制主要包括声明式事务和编程式事务,声明式事务让我们从复杂的事务处理中得到解脱,编程式事务在实际开发中得不到广泛使用,仅供学习参考。
蒋老湿
2019/07/31
2.1K0
Spring源码剖析8:Spring事务概述
事务首先是一系列操作组成的工作单元,该工作单元内的操作是不可分割的,即要么所有操作都做,要么所有操作都不做,这就是事务。
Java技术江湖
2019/11/26
6350
aop事务管理-Spring事务实现原理
  对于一个应用而言,事务的使用基本是不可避免的。虽然Spring给我们提供了开箱即用的事务功能——@。
宜轩
2022/12/29
4300
Spring高手之路25——深入解析事务管理的切面本质
事务管理在Spring中的实现依赖于AOP,而AOP主要通过代理机制来实现。具体而言,AOP通过代理对象拦截对目标方法的调用,并在方法调用前后插入事务管理逻辑。拦截器机制是AOP实现的一部分,用于定义具体的增强逻辑。
砖业洋__
2024/12/03
5320
Spring高手之路25——深入解析事务管理的切面本质
Spring 事务失效的六种情况
数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么一起成功,要么一起失败,是一个不可分割的工作单元。
Jensen_97
2023/07/20
5990
Spring 事务失效的六种情况
程序员新人周一优化一行代码,周三被劝退?
这周一,公司新来了一个同事,面试的时候表现得非常不错,各种问题对答如流,老板和我都倍感欣慰。
沉默王二
2022/08/26
3270
程序员新人周一优化一行代码,周三被劝退?
Spring 事务失效的几种情况
数据库事务是指作为单个逻辑工作单元执行的一系列操作,这些操作要么一起成功,要么一起失败,是一个不可分割的工作单元。
闻说社
2023/02/07
4400
相关推荐
Spring事务王国概览
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档