当前位置: 首页 > news >正文

# Spring事务

Spring事务

什么是spring的事务?

在Spring框架中,事务管理是一种控制数据库操作执行边界的技术,确保一系列操作要么全部成功,要么全部失败,从而维护数据的一致性和完整性。Spring的事务管理主要关注以下几点:

  • 原子性(Atomicity):
    事务中的所有操作被视为一个不可分割的工作单元,如果其中任何一个操作失败,那么整个事务都会被撤销。
  • 一致性(Consistency):
    事务开始前和结束后,数据都必须保持一致状态。这意味着事务的执行不会破坏任何约束或业务规则。
  • 隔离性(Isolation):
    多个并发事务之间不会相互影响,每个事务都像是在独立的环境中运行,以防止脏读、不可重复读和幻读等问题。
  • 持久性(Durability):
    一旦事务完成并提交,它对数据库所做的更改就是永久的,即使系统崩溃,这些更改也不会丢失。

Spring支持两种类型的事务管理

  • 编程式事务管理:通过在代码中显式地调用TransactionTemplate或PlatformTransactionManager接口来管理事务,这种方式提供了更细粒度的控制,但会使代码变得复杂且不易维护。
  • 声明式事务管理:通过使用@Transactional注解或配置XML的方式在方法或类级别声明事务属性,这种方式更简洁,易于理解和维护,是Spring推荐的事务管理方式。

Spring的事务管理器(如DataSourceTransactionManager或JpaTransactionManager)与底层的数据源或持久层框架集成,提供了一致的事务抽象,使得开发人员可以专注于业务逻辑而不用关心具体的事务处理细节。

spring事务的传播机制有哪些?

Spring的事务传播机制定义了多个包含了事务的方法在相互调用时,事务是如何在这些方法间进行传递的。它确保了一个事务在多个调用方法间的可控性和稳定性。Spring事务传播机制包含以下七种类型:

  1. Propagation.REQUIRED(默认)
  • 描述:默认的事务传播级别。如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
  • 适用场景:适用于大多数业务场景,确保业务操作要么全部成功,要么全部失败。
  1. Propagation.SUPPORTS
  • 描述:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
  • 适用场景:适用于非必须依赖事务的查询操作,或者不确定是否会有事务存在的情况。
  1. Propagation.MANDATORY
  • 描述:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
  • 适用场景:适用于那些必须运行在事务中的方法,确保事务的强制存在。
  1. Propagation.REQUIRES_NEW
  • 描述:表示创建一个新的事务,如果当前存在事务,则把当前事务挂起。即无论外部是否开启事务,REQUIRES_NEW修饰的方法都会新开启自己的事务,且开启的事务之间相互独立,互不干扰。
  • 适用场景:适用于需要完全隔离的业务操作,确保不受外部事务影响。
  1. Propagation.NOT_SUPPORTED
  • 描述:以非事务的方式运行,如果当前存在事务,则把当前事务挂起。
  • 适用场景:适用于那些不需要事务支持的操作,如只读查询或更新操作不需要事务控制。
  1. Propagation.NEVER
  • 描述:以非事务的方式运行,如果当前存在事务,则抛出异常。
  • 适用场景:确保方法不会运行在事务环境中,避免事务对方法执行的影响。
  1. Propagation.NESTED
  • 描述:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于Propagation.REQUIRED。
  • 适用场景:适用于需要部分回滚而又不影响外部事务的场景,嵌套事务可以在内部进行回滚,而不影响外部事务。

Spring事务传播机制通过这七种类型,提供了灵活的事务控制策略,以满足不同业务场景的需求。在实际应用中,可以根据业务的具体要求选择适当的事务传播级别,以确保数据的一致性和完整性。

spring事务的隔离级别

Spring的隔离级别是解决多个事务同时调用数据库时,如何控制事务之间的可见性和数据一致性的重要机制。Spring框架提供了五种事务隔离级别,这些级别与数据库的事务隔离级别紧密相关,但由Spring框架进行配置和管理。以下是Spring的五种事务隔离级别的详细解释:

  1. ISOLATION_DEFAULT(DEFAULT)
  • 描述:这是PlatformTransactionManager的默认隔离级别,它使用连接的数据库默认的事务隔离级别。如果数据库默认隔离级别是READ COMMITTED,那么Spring事务的默认隔离级别也是READ COMMITTED。
  • 特点:依赖数据库的具体实现,不提供额外的事务隔离保证。
  1. ISOLATION_READ_UNCOMMITTED(READ UNCOMMITTED)
  • 描述:这是事务最低的隔离级别,允许一个事务读取另一个事务未提交的数据。
  • 问题:这种隔离级别容易产生脏读、不可重复读和幻读问题。脏读是指读取到未提交的数据,这些数据可能在后续被回滚,导致读取到的数据是无效的。
  1. ISOLATION_READ_COMMITTED(READ COMMITTED)
  • 描述:保证一个事务只能读取到已经提交的数据,不能读取未提交的数据。
  • 解决问题:解决了脏读问题,因为一个事务无法读取到另一个事务未提交的数据。
  • 遗留问题:但仍然存在不可重复读和幻读问题。不可重复读是指在一个事务内,多次读取同一数据,由于其他事务的修改,导致读取结果不一致。
  1. ISOLATION_REPEATABLE_READ(REPEATABLE READ)
  • 描述:这种事务隔离级别可以防止脏读和不可重复读问题。它确保了一个事务多次读取同一数据时,得到的结果是一致的。
  • 解决问题:通过锁定读取的数据行,防止其他事务修改这些数据,从而避免不可重复读问题。
  • 遗留问题:但仍然存在幻读问题。幻读是指当事务重新读取一个范围的记录时,由于其他事务插入了新的记录,导致读取结果集不一致。
  1. ISOLATION_SERIALIZABLE(SERIALIZABLE)
  • 描述:这是最高的隔离级别,事务被串行化执行,即事务只能一个接一个地执行,不能并发执行。
  • 解决问题:解决了脏读、不可重复读和幻读所有问题。
  • 缺点:性能开销大,因为事务必须串行执行,无法利用数据库的并发能力。

Spring的事务隔离级别通过控制事务之间的可见性和数据一致性,确保了数据库操作的正确性和可靠性。在选择隔离级别时,需要根据实际业务需求和数据一致性要求来权衡。通常,默认的隔离级别(ISOLATION_DEFAULT)或READ COMMITTED已经足够满足大多数业务需求,但在需要更高数据一致性要求的场景下,可能需要选择更高的隔离级别。然而,需要注意的是,隔离级别越高,性能开销也越大,因此需要在数据一致性和性能之间做出合理的选择。

相关文章:

# Spring事务

Spring事务 什么是spring的事务? 在Spring框架中,事务管理是一种控制数据库操作执行边界的技术,确保一系列操作要么全部成功,要么全部失败,从而维护数据的一致性和完整性。Spring的事务管理主要关注以下几点&#xf…...

Java学习笔记--数组常见算法:数组翻转,冒泡排序,二分查找

一,数组翻转 1.概述:数组对称索引位置上的元素互换,最大值数组序号是数组长度减一 创建跳板temp,进行min和max的互换,然后min自增,max自减,当min>max的时候停止互换,代表到中间值 用代码实…...

ARM 架构(Advanced RISC Machine)精简指令集计算机(Reduced Instruction Set Computer)

文章目录 1、ARM 架构ARM 架构的特点ARM 架构的应用ARM 架构的未来发展 2、RISCRISC 的基本概念RISC 的优势RISC 的应用RISC 与 CISC 的对比总结 1、ARM 架构 ARM 架构是一种低功耗、高性能的处理器架构,广泛应用于移动设备、嵌入式系统以及越来越多的服务器和桌面…...

7.STM32之通信接口《精讲》之USART通信---多字节数据收发(数据包的模式:HEX数据包和文本数据包)

根据上一节的HEX数据包的设计完成,本节将完成文本数据包的编写,(HEX数据包其实本质就是原始数据,文本数据包我么要接收到还要对照ASCll进行解析封装) 有不懂的可参考上一节的讲解!!&#xff…...

基于Vue+SpringBoot的求职招聘平台

平台概述 本平台是一个高效、便捷的人才与职位匹配系统,旨在为求职者与招聘者提供一站式服务。平台内设三大核心角色:求职者、招聘者以及超级管理员,每个角色拥有独特的功能模块,确保用户能够轻松完成从信息获取到最终录用的整个…...

WebRTC 和 WebSocket

WebRTC 和 WebSocket 是两种不同的技术,虽然它们都用于在浏览器之间进行通信,但它们的设计目标和使用场景有所不同。以下是它们之间的主要区别: 目的和使用场景 WebRTC: 主要用于实现实时音视频通信。 支持点对点(P2P&#xff09…...

小车综合玩法--5.画地为牢

一、实验准备 前面我们利用四路巡线模块巡线,现在我们利用这个特性,用黑线将小车围起来,让小车一直在我们围的圈内运动。 1.小车接线已安装,且安装正确 2.调试四路巡线模块遇黑线时指示灯亮。不是黑线时指示灯灭。 二、实验原理…...

数据库课程设计全流程:方法与实例解析

--- ### 一、数据库课程设计概述 数据库课程设计是学习数据库理论知识的重要实践环节,旨在帮助学生掌握数据库设计和应用系统开发的完整流程,包括需求分析、数据库设计、功能实现以及性能优化。 #### **设计目标** 1. 掌握数据库设计的基本步骤和原则…...

用Ruby编写一个自动化测试脚本,验证网站登录功能的正确性。

测试准备:从江河湖海到代码世界的奇妙之旅 亲爱的朋友们,你们好!今天我要带你们进入一个神奇的世界——测试的世界。在这里,我们将会看到各种各样的测试用例,它们就像江河湖海一样,汇聚在一起,…...

跳表 | 基本概念 | 代码实现

文章目录 1.跳表的基本概念2.跳表的结构3.跳表的增删改查4.完整代码 1.跳表的基本概念 跳表的本质是一种查找结构,一般查找问题的解法分为两个大类:一个是基于各种平衡树,一个是基于哈希表,跳表比较的特殊,它独成一派…...

分数加减

#include <stdio.h> #include <stdlib.h>// 求最大公因数 int gcd(int a, int b) {return b 0? a : gcd(b, a % b); }// 化简分数 void simplify(int *num, int *den) {int g gcd(*num, *den);*num / g;*den / g;if (*den < 0) {*num * -1;*den * -1;} }//…...

基于卷积神经网络的皮肤病识别系统(pytorch框架,python源码,GUI界面,前端界面)

更多图像分类、图像识别、目标检测等项目可从主页查看 功能演示&#xff1a; 皮肤病识别系统 vgg16 resnet50 卷积神经网络 GUI界面 前端界面&#xff08;pytorch框架 python源码&#xff09;_哔哩哔哩_bilibili &#xff08;一&#xff09;简介 基于卷积神经网络的皮肤病识…...

QT与嵌入式——获取网络实时时间

目录 1、使用QT通过网络API接口获取网络实时时间 1.1、首先在网上找一个获取实时时间的API接口 1.2、 根据第一步获取的链接来发送请求 1.3、通过connect链接信号与槽 注意的点&#xff1a; 2、为什么需要网络实时时间 3、获取本机的实时时间 4、顺带提一句 1、使用QT通过…...

优化装配,提升品质:虚拟装配在汽车制造中的关键作用

汽车是各种零部件的有机结合体&#xff0c;因此汽车的装配工艺水平和装配质量直接影响着汽车的质量与性能。在汽车装配过程中&#xff0c;经常会发生零部件间干涉或装配顺序不合理等现象&#xff0c;且许多零部件制造阶段产生的质量隐患要等到实际装配阶段才能显现出来&#xf…...

Bug的严重等级和优先级别与分类

目录 前言 1. Bug的严重等级定义 2.Bug的优先等级 3.一般 BUG 的正规的处理流程 4.BUG严重等级划分 5.BUG紧急程度定义 前言 Bug是指在软件开发或者系统运行过程中出现的错误、缺陷或者异常情况。它可能导致系统无法正常工作、功能不完整、数据错误或者界面异常等问题。 …...

游戏引擎学习第13天

视频参考:https://www.bilibili.com/video/BV1QQUaYMEEz/ 改代码的地方尽量一张图说清楚吧,懒得浪费时间 game.h #pragma once #include <cmath> #include <cstdint> #include <malloc.h>#define internal static // 用于定义内翻译单元内部函数 #…...

bind返回失败(ctrl+c)结束后不能再次加载

问题现象&#xff08;VxWorks&#xff09;&#xff1a; 在测试的时候发现使用ctrlc打断程序后再次调用bind绑定失败 错误返回 0x30 问题分析&#xff1a; 1、程序没有开启端口复用。 2、程序在使用ctrlc打断后 vxWorks的打断和linux不相同&#xff0c;并没有清除底层的端口&a…...

菜鸟驿站二维码/一维码 取件识别功能

特别注意需要引入 库文 ZXing 可跳转&#xff1a; 记录【WinForm】C#学习使用ZXing.Net生成条码过程_c# zxing-CSDN博客 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using static System.Net.…...

23种设计模式-备忘录(Memento)设计模式

文章目录 一.什么是备忘录设计模式&#xff1f;二.备忘录模式的特点三.备忘录模式的结构四.备忘录模式的优缺点五.备忘录模式的 C 实现六.备忘录模式的 Java 实现七.总结 类图&#xff1a; 备忘录设计模式类图 一.什么是备忘录设计模式&#xff1f; 备忘录设计模式&#xff08…...

搜维尔科技:Manus遥操作五指机械手专用手套惯性高精度虚拟现实

Manus遥操作五指机械手专用手套惯性高精度虚拟现实 搜维尔科技&#xff1a;Manus遥操作五指机械手专用手套惯性高精度虚拟现实...

实战复盘:我是如何通过一个SSRF漏洞,利用Gopher协议拿下内网Redis的

从SSRF到内网Redis入侵&#xff1a;一次真实渗透测试的深度剖析 那天下午&#xff0c;我正在对某企业Web应用进行常规安全评估。一个看似普通的文件下载接口引起了我的注意——它接受URL参数并返回对应资源内容。直觉告诉我&#xff0c;这里可能存在SSRF漏洞。接下来的72小时&a…...

从‘古董’到统一:聊聊Linux内核中buffer与cache合并背后的那些事儿(附free命令实战)

从‘古董’到统一&#xff1a;Linux内核中buffer与cache合并背后的设计哲学 在Linux系统的性能优化领域&#xff0c;free命令的输出一直是开发者关注的焦点。当你键入free -h时&#xff0c;那行看似简单的"buff/cache"统计背后&#xff0c;隐藏着一段跨越二十年的内…...

卡尔曼滤波中的‘信任度’分配:从高斯分布乘积公式看估计与观测谁更重要

卡尔曼滤波中的‘信任度’分配&#xff1a;从高斯分布乘积公式看估计与观测谁更重要 在机器人定位或金融时间序列预测中&#xff0c;我们常常面临一个核心问题&#xff1a;当预测值和观测值都存在不确定性时&#xff0c;如何决定更信任哪一个&#xff1f;这不仅仅是数学问题&a…...

低成本传感器动态校准:SenDaL框架原理与应用

1. 低成本传感器校准的行业痛点与SenDaL解决方案在智能家居和工业物联网领域&#xff0c;我们经常面临一个尴尬的境地&#xff1a;高精度传感器价格昂贵难以大规模部署&#xff0c;而低成本传感器的数据质量又令人担忧。以PM2.5监测为例&#xff0c;专业级β射线传感器的价格可…...

IJPay实战:一站式解决微信APP支付签名与回调难题

1. 为什么选择IJPay解决微信APP支付难题 第一次接触微信APP支付时&#xff0c;我被官方文档里密密麻麻的参数列表吓到了。特别是签名验证环节&#xff0c;光是参数顺序错误就让我调试了整整两天。后来发现团队里老张的项目接支付接口特别快&#xff0c;追问之下才知道用了IJPay…...

从手动导入到自动溯源:Perplexity提问→Mendeley定位原文→高亮引用段落→一键生成BibTeX(全流程图解)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;从手动导入到自动溯源&#xff1a;Perplexity提问→Mendeley定位原文→高亮引用段落→一键生成BibTeX&#xff08;全流程图解&#xff09; 科研写作中&#xff0c;文献溯源与引用管理长期面临“知其然不…...

3PEAK思瑞浦 TPA3532-VS1R MSOP8 运算放大器

特性 超低输入偏置电流: -在TA25C时最大士1pA(实验室测试限值) 安 -在-40C至125C(实验室测试限值)下&#xff0c;最大30皮 低输入失调电压:250V(最大值) 集成保护缓冲器&#xff0c;最大偏移电压为200V 低电压噪声密度:18nV/vHz(在1kHz时) 宽带宽:2.1MHz 供电电压:4.5V至16V(2.…...

Arm编译器在嵌入式开发中的优化实践

1. Arm编译器嵌入式开发环境概述在嵌入式系统开发领域&#xff0c;工具链的选择往往决定了最终产品的性能上限。作为Arm架构的"原生"编译器&#xff0c;Arm Compiler for Embedded凭借其深度优化的代码生成能力&#xff0c;在物联网设备、工业控制器等资源受限场景中…...

从入门到精通:IGV基因组浏览器实战操作全解析

1. IGV基因组浏览器初探 第一次接触IGV&#xff08;Integrative Genomics Viewer&#xff09;是在五年前分析RNA-seq数据时&#xff0c;当时被它轻量级的安装包和流畅的基因组导航体验惊艳到了。作为一款由Broad研究所开发的免费工具&#xff0c;IGV完美平衡了专业性和易用性—…...

信息安全工程师-网络安全风险评估(上篇):框架、流程与量化基础

一、引言 &#xff08;一&#xff09;核心定位与定义 网络安全风险评估是信息安全管理体系的核心方法论&#xff0c;在软考信息安全工程师考试中属于信息安全管理模块的高频考点&#xff0c;占比约 8-10 分。其标准定义为&#xff1a;依据 GB/T 20984-2007《信息安全技术 信息…...