Spring-6-事务管理

事务是构建可靠企业级应用程序的最关键部分之一。

最常见的事务类型是数据库操作。

在典型的数据库更新操作中,首先数据库事务开始,然后数据被更新,最后提交或回滚事务(根据数据库操作的结果而定)。但是,在很多情况下,由于应用程序需求以及应用程序需要与之交互的后端资源(如RDBMS、面向消息的中间件、ERP系统等)的不同,事务管理可能更加复杂。

Spring支持声明式和编程式事务管理。
Spring声明性事务提供极好的支持,这意味着不需要将事务管理代码和业务逻辑混淆起来。

所要做的就是声明必须参与事务的相关方法(在类或层中)以及事务配置的细节,Spring将负责处理事务管理。

  • Spring事务抽象层:讨论Spring事务抽象类的基本组件,并解释如何使用这些类来控制事务的属性。
  • 声明式事务管理:演示如何使用Spring和简单的Java对象来实现声明式事务管理,提供使用XML配置文件以及Java注解的声明式事务管理示例。
  • 编程式事务管理:尽管编程式事务管理并不经常使用,但本章还是介绍了如何使用Spring提供的TransactionTemplate类,它可以让开发人员完全控制事务管理代码。
  • 使用JTA实现全局事务:对于需要跨越多个后端资源的全局事务,演示如何使用JTA在Spring中配置和实现全局事务。

事务类型

本地事务易于管理,如果应用程序中的所有操作都需要与一个事务资源(如JDBC连接)进行交互,那么使用本地事务就足够了。

但是,如果没有使用像Spring这样的应用程序框架,则需要编写大量的事务管理代码,并且如果将来事务的范围需要扩展到跨多个事务资源,就必须删除本地事务管理代码并重新编写代码,以便使用全局事务。

在Java世界中,全局事务是通过JTA实施的。

在这种情况下,与JTA兼容的事务管理器通过各自的资源管理器连接到多个事务资源,而这些资源管理器能够通过XA协议(一种定义了分布式事务的开放标准)与事务管理器进行通信,并使用2 Phase Commit(2PC)机制来确保所有后端数据源被更新或完全回滚。

如果任意后端资源失败,则整个事务将回滚,因此对其他资源的更新也会回滚。

在这里插入图片描述

隔离级别

在这里插入图片描述

传播类型

在这里插入图片描述

TransactionStatus接口

下面所示的TransactionStatus接口允许事务管理器控制事务的执行。这些代码可以检查事务是新事务还是只读事务,并且可以启动回滚。

在这里插入图片描述TransactionStatus接口中的方法非常容易理解;最值得注意的是setRollbackOnly()方法,它会导致回滚并结束活动事务。

hasSavePoint()方法指示事务内部是否携带保存点(也就是说,事务是基于保存点而创建的嵌套事务)。

如果可用(例如,与Hibermate一起使用时),flush()方法会将底层会话存储到数据存储区。

isCompleted()方法指示事务是否结束。

@Transactional注解的属性

在这里插入图片描述

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

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

相关文章

你能描述下你对vue生命周期的理解?在created和mounted这两个生命周期中请求数据有什么区别呢?

一、生命周期是什么 生命周期(Life Cycle)的概念应用很广泛,特别是在政治、经济、环境、技术、社会等诸多领域经常出现,其基本涵义可以通俗地理解为“从摇篮到坟墓”(Cradle-to-Grave)的整个过程在Vue中实…

【unity学习笔记】配置模型,实现眨眼和口型效果

一、vriod捏人 1.在vroidstudio软件中捏人 2.导出模型(.vrm) 二、vrid导入unity的插件 1.在Git上搜索、打开univrm。 2.找到release页面找到合适的插件版本。(VRM-0.116.0_0f6c) 3.将univrm导入到工程中(assets)。 三…

QT上位机开发(第一个应用)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 不管是软件,还是硬件,如果我们能够顺利启动第一个应用,点亮第一个电路的话,这对我们的信心来说会有…

MacBook查看本机IP

嘚吧嘚 其实这也不是什么困难的问题,但是今年刚刚入坑Mac,外加用的频率不是很高,每次使用的时候都查,用完就忘,下次用的时候再查🤮。真的把自己恶心坏了🙈。 所以写篇文章记录一下&#x1f92…

houdini fft模型

按照博友给的代码,进行可视化,发现绘出的图形没有错误,但计算的结果16,32,64.。。居然是错的;哪位知道正确的,敬请指正,或是后续啥时候复习完后再改正吧 主要函数代码 ic_lay detai…

VSCode + vite + vue3断点调试配置

没想到这个配置我搞了一上午,网上很多的配置方案都没有效果。总算搞定了,特此记录一下。 首先需要在.vscode文件夹下面创建launch.json配置文件。然后输入如下配置: {// 使用 IntelliSense 了解相关属性。 // 悬停以查看现有属性的描述。//…

从零开始:使用 BIND 构建和管理您的 DNS 服务器

1 前言 在这篇文章中,我将详细介绍如何使用 BIND(Berkeley Internet Name Domain)软件包中的 named 程序来配置和管理一个基本的 DNS 服务器。 从安装 BIND 开始,到设置 DNS 区域文件,再到运行和测试您的服务器&#x…

GPT4All : 便捷易用的本地智能问答推理软件(乱记)

安装与使用 去官网 https://gpt4all.io/index.html下载可执行文件。 打开应用即可看到是否共享数据的选项: 然后自动进入模型下载界面 测试 内存占用 缺点:在我本地的轻薄本上运行时,风扇会有轻微噪声,关闭软件很久都没停止。…

华为无线AC内三层漫游配置详解

重要说明 1、在一台ac中实现三层漫游 2、ac和核心的互联vlan和ap的管理vlan是同一个广播域,可以不用配option 43 3、直接转发模式,ac上可以不起业务vlan,ac和核心交换机上可以只放行一个互联vlan 10 4、ac上要启两个vap魔板,两个…

为什么ChatGPT采用SSE协议而不是Websocket?

在探索ChatGPT的使用过程中,我们发现GPT采用了流式数据返回的方式。理论上,这种情况可以通过全双工通信协议实现持久化连接,或者依赖于基于EventStream的事件流。然而,ChatGPT选择了后者,也就是本文即将深入探讨的SSE&…

线性代数——(期末突击)行列式(上)-行列式计算、行列式的性质

目录 行列式 行列式计算 逆序数 行列式的性质 转置 两行(列)互换 两行(列)对应相等 提公因子 两行(列)对应成比例 某行(列)为零 行列式分裂 行列式变换及三角行列式 行…

数据库一般会采取什么样的优化方法?

数据库一般会采取什么样的优化方法? 1、选取适合的字段属性 为了获取更好的性能,可以将表中的字段宽度设得尽可能小。 尽量把字段设置成not null 执行查询的时候,数据库不用去比较null值。 对某些省份或者性别字段,将他们定义为e…