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

Spring-事务

Spring 事务

事务的基本概念

🔹 什么是事务?

事务是一组数据库操作,它们作为一个整体,要么全部成功,要么全部回滚。 常见的事务场景:

  • 银行转账(扣款和存款必须同时成功)

  • 订单系统(创建订单和扣减库存必须同时成功)

🔹 事务的四大特性(ACID)

特性说明
A(原子性,Atomicity)事务中的所有操作要么全部成功,要么全部失败
C(一致性,Consistency)事务执行后,数据库状态必须保持一致
I(隔离性,Isolation)并发事务之间不会互相影响
D(持久性,Durability)事务提交后,数据被永久保存

事务分为两种:

声明式事务:

使用Spring的@Transactional注解来管理事务

name"error" 时,抛出异常,事务回滚,数据不会被插入数据库

name"John" 时,正常插入数据,事务提交。

编程式事务:

需要手动控制的事务

事务控制的步骤

  1. 配置数据库连接

  2. 将食物管理器加尔uioc容器,并将数据库连接的对象传入事务管理器

  3. 在配置类上方写上@EnableTransactionManagement注解,表示开启事务管理

  4. 在要开启事务的方法上写@Transactional注解

事务的属性

1.只读readonly

设置方式:在@Transactional注解中加上属性readOnly,设置为true,即此方法的事务操作为只读模式,如果有DML的语句,就会报错。

防止误修改数据:如果在 readOnly = true 的事务中尝试修改数据,可能会抛出异常(取决于数据库)。

适用于只读操作:如 查询数据,但不涉及 插入、更新、删除 操作。

2.时间超时timeout

设置方式: 在@Transactional注解中加上属性timeout = xx ,此时事务若长时间占用资源,会自动回滚

3.rollbackFor

@Transactional(rollback = Exception.class)用于指定哪写异常需要回滚

3.noRollbackFor

@Transactional(rollback = Exception.class)用于指定哪写异常不需要回滚

4.Isolation Level

隔离级别有四种

1.READ_UNCOMMITTED(允许脏读)

修改表数据,即使事务未提交也可以查询到修改数据(脏读)

2.READ_COMMITTED

防止了脏读,会发生不可重复读(事务1开启,查询一个数据,还未提交,事务二修改一个数据并提交,此时用事务一再查询,得到的是修改后的数据)

3.REPEATABLE_READ

防止了不可重复读,可能发生幻读(和不可重复读类似,但不可重复读是数据修改,幻读是新增或删除数据)

4.SERIALIZABLE

此为做高级别,可以防止以上全部情况

推荐 READ_COMMITTED 作为默认隔离级别(防止脏读,性能较好)。

对于高并发场景(如库存管理),建议 REPEATABLE_READ,防止不可重复读。

对于金融级别的事务(如转账),使用 SERIALIZABLE,确保数据一致性(但性能较差)。

避免 READ_UNCOMMITTED,因为它可能导致数据不一致问题。

propagation传播

名称含义
REQUIRED(默认值)如果父方法有事务,就加入,如果没有就新建,自己独立
REQUIRES_NEW不管父方法是否有事务,我都新建事务,都是独立的

相关文章:

Spring-事务

Spring 事务 事务的基本概念 🔹 什么是事务? 事务是一组数据库操作,它们作为一个整体,要么全部成功,要么全部回滚。 常见的事务场景: 银行转账(扣款和存款必须同时成功) 订单系统…...

Git系列之git tag和ReleaseMilestone

以下是关于 Git Tag、Release 和 Milestone 的深度融合内容,并补充了关于 Git Tag 的所有命令、详细解释和指令实例,条理清晰,结合实际使用场景和案例。 1. Git Tag 1.1 定义 • Tag 是 Git 中用于标记特定提交(commit&#xf…...

考研机试常见基本题型

1、求100以内的素数 sqrt()函数在cmath头文件中。 #include <iostream> #include <cmath> using namespace std;int main() {int count 0; // 用于统计素数的个数// 遍历 100 到 200 之间的每一个数for (int num 100; num < 200; num) {bool isPrime true…...

Android AudioFlinger(四)—— 揭开PlaybackThread面纱

前言&#xff1a; 继上一篇Android AudioFlinger&#xff08;三&#xff09;—— AndroidAudio Flinger 之设备管理我们知道PlaybackThread继承自Re’fBase&#xff0c; 在被第一次引用的时候就会调用onFirstRef&#xff0c;实现如下&#xff1a; void AudioFlinger::Playbac…...

C语言基础系列【20】内存管理

博主介绍&#xff1a;程序喵大人 35- 资深C/C/Rust/Android/iOS客户端开发10年大厂工作经验嵌入式/人工智能/自动驾驶/音视频/游戏开发入门级选手《C20高级编程》《C23高级编程》等多本书籍著译者更多原创精品文章&#xff0c;首发gzh&#xff0c;见文末&#x1f447;&#x1f…...

JavaScript基础-递增和递减运算符

在JavaScript编程中&#xff0c;递增&#xff08;&#xff09;和递减&#xff08;--&#xff09;运算符是用于对数值进行加一或减一操作的基础工具。它们简洁且强大&#xff0c;但如果不正确地使用&#xff0c;可能会导致混淆或错误。本文将详细介绍这两种运算符的不同形式及其…...

计算机毕业设计SpringBoot+Vue.js社区医疗综合服务平台(源码+文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

3.6c语言

#define _CRT_SECURE_NO_WARNINGS #include <math.h> #include <stdio.h> int main() {int sum 0,i,j;for (j 1; j < 1000; j){sum 0;for (i 1; i < j; i){if (j % i 0){sum i;} }if (sum j){printf("%d是完数\n", j);}}return 0; }#de…...

Unity开发——CanvasGroup组件介绍和应用

CanvasGroup是Unity中用于控制UI的透明度、交互性和渲染顺序的组件。 一、常用属性的解释 1、alpha&#xff1a;控制UI的透明度 类型&#xff1a;float&#xff0c;0.0 ~1.0&#xff0c; 其中 0.0 完全透明&#xff0c;1.0 完全不透明。 通过调整alpha值可以实现UI的淡入淡…...

深度学习驱动的跨行业智能化革命:技术突破与实践创新

第一章 深度学习的技术范式演进与核心架构 1.1 从传统机器学习到深度神经网络的跨越 深度学习的核心在于通过多层次非线性变换自动提取数据特征,其发展历程可划分为三个阶段:符号主义时代的规则驱动(1950s-1980s)、连接主义时代的浅层网络(1990s-2000s)以及深度学习时代…...

php配置虚拟主机

在PHP中配置虚拟主机&#xff0c;通常是通过Apache或Nginx等Web服务器来进行设置的。下面我将分别介绍如何在Apache和Nginx中配置PHP虚拟主机。 1. Apache 配置虚拟主机 Apache是最常用的Web服务器之一&#xff0c;配置虚拟主机的步骤如下&#xff1a; 步骤一&#xff1a;确保A…...

RESTful API 设计指南

RESTful API 介绍 大佬的总结&#xff1a;RESTful API 设计指南 - 阮一峰的网络日志 json-server github地址 这里介绍一个快速搭建 REST API 服务的工具包 接口测试工具 介绍几个接口测试工具 apipost apifox postman https://www.apipost.cn/ (中文) https://www.apifox…...

在虚拟机上安装Hadoop

以下是在虚拟机上安装Hadoop的一般步骤&#xff1a; 准备工作 - 安装虚拟机软件&#xff1a;如VMware Workstation或VirtualBox等。 - 创建虚拟机&#xff1a;选择合适的操作系统镜像&#xff0c;如Ubuntu或CentOS等Linux发行版&#xff0c;为虚拟机分配足够的CPU、内存和磁盘…...

大白话JavaScript实现一个函数,将字符串中的每个单词首字母大写。

大白话JavaScript实现一个函数&#xff0c;将字符串中的每个单词首字母大写。 答题思路 理解需求&#xff1a;要写一个函数&#xff0c;它能接收一个字符串&#xff0c;然后把这个字符串里每个单词的第一个字母变成大写。分解步骤 拆分单词&#xff1a;一般单词之间是用空格隔…...

【VUE2】第三期——样式冲突、组件通信、异步更新

目录 1 scoped解决样式冲突 2 data写法 3 组件通信 3.1 父子关系 3.1.1 父向子传值 props 3.1.2 子向父传值 $emit 3.2 非父子关系 3.2.1 event bus 事件总线 3.2.2 跨层级共享数据 provide&inject 4 props 4.1 介绍 4.2 props校验完整写法 5 v-model原理 …...

深度学习代码解读——自用

代码来自&#xff1a;GitHub - ChuHan89/WSSS-Tissue 借助了一些人工智能 2_generate_PM.py 功能总结 该代码用于 生成弱监督语义分割&#xff08;WSSS&#xff09;所需的伪掩码&#xff08;Pseudo-Masks&#xff09;&#xff0c;是 Stage2 训练的前置步骤。其核心流程为&a…...

Linux 配置静态 IP

一、简介 在 Linux CentOS 系统中默认动态分配 IP 地址&#xff0c;每次启动虚拟机服务都是不一样的 IP&#xff0c;因此要配置静态 IP 地址避免每次都发生变化&#xff0c;下面将介绍配置静态 IP 的详细步骤。 首先先理解一下动态 IP 和静态 IP 的概念&#xff1a; 动态 IP…...

Oxidized收集H3C交换机网络配置报错,not matching configured prompt (?-mix:^(<CD>)$)

背景&#xff1a;问题如上标题&#xff0c;H3C所有交换机配置的model都是comware 解决方案&#xff1a; 1、找到compare.rb [rootoxidized model]# pwd /usr/local/lib/ruby/gems/3.1.0/gems/oxidized-0.29.1/lib/oxidized/model [rootoxidized model]# ll comware.rb -rw-r--…...

RAG技术深度解析:从基础Agent到复杂推理Deep Search的架构实践

重磅推荐专栏: 《大模型AIGC》 《课程大纲》 《知识星球》 本专栏致力于探索和讨论当今最前沿的技术趋势和应用领域,包括但不限于ChatGPT和Stable Diffusion等。我们将深入研究大型模型的开发和应用,以及与之相关的人工智能生成内容(AIGC)技术。通过深入的技术解析和实践经…...

6.过拟合处理:确保模型泛化能力的实践指南——大模型开发深度学习理论基础

在深度学习开发中&#xff0c;过拟合是一个常见且具有挑战性的问题。当模型在训练集上表现优秀&#xff0c;但在测试集或新数据上性能大幅下降时&#xff0c;就说明模型“记住”了训练数据中的噪声而非学习到泛化规律。本文将从实际开发角度系统讲解如何应对过拟合&#xff0c;…...

智能文献管理全面指南:从学术研究痛点到高效解决方案

智能文献管理全面指南&#xff1a;从学术研究痛点到高效解决方案 【免费下载链接】zotero Zotero is a free, easy-to-use tool to help you collect, organize, annotate, cite, and share your research sources. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero …...

JeecgBoot低代码开发平台终极实战指南:从零开始构建企业级应用

JeecgBoot低代码开发平台终极实战指南&#xff1a;从零开始构建企业级应用 【免费下载链接】jeecg-boot jeecgboot/jeecg-boot 是一个基于 Spring Boot 的 Java 框架&#xff0c;用于快速开发企业级应用。适合在 Java 应用开发中使用&#xff0c;提高开发效率和代码质量。特点是…...

告别B站评论区识人难题!这个免费工具让你一键掌握用户背景

告别B站评论区识人难题&#xff01;这个免费工具让你一键掌握用户背景 【免费下载链接】bilibili-comment-checker B站评论区自动标注成分&#xff0c;支持动态和关注识别以及手动输入 UID 识别 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-comment-checker …...

JDK24虚拟线程pinning问题终于解决了!手把手教你如何避免同步代码块阻塞

JDK24虚拟线程pinning问题深度解析与实战优化指南 虚拟线程作为Java平台近年来最重要的并发模型革新&#xff0c;从JDK21的初次亮相到JDK24的成熟完善&#xff0c;已经逐步改变了Java开发者处理高并发的思维方式。本文将带您深入理解pinning问题的本质&#xff0c;掌握JDK24中的…...

XC6206-1.8V是什么?有哪些作用?

本文主要介绍XC6206-1.8V是什么&#xff1f;有哪些作用&#xff1f;XC6206-1.8V是一款超低功耗、高精度的固定输出低压差线性稳压器&#xff08;LDO&#xff09;&#xff0c;核心作用是把较高电压转换成稳定的1.8V输出&#xff0c;专门为电池供电和低功耗设备设计。图文来源&am…...

【生产环境实录】Mojo嵌入Python解释器时core dump突增300%:我们如何通过LLVM IR层Hook定位并修复内存所有权越界

第一章&#xff1a;【生产环境实录】Mojo嵌入Python解释器时core dump突增300%&#xff1a;我们如何通过LLVM IR层Hook定位并修复内存所有权越界问题现象与紧急响应 上线后72小时内&#xff0c;Mojo服务在调用 PyRun_String 执行动态Python代码片段时&#xff0c;core dump率从…...

轻量级PDF渲染库PdfiumAndroid:Android开发者的高效集成指南

轻量级PDF渲染库PdfiumAndroid&#xff1a;Android开发者的高效集成指南 【免费下载链接】PdfiumAndroid 项目地址: https://gitcode.com/gh_mirrors/pd/PdfiumAndroid 核心价值&#xff1a;为什么选择PdfiumAndroid&#xff1f; &#x1f4cc; 解决PDF渲染痛点&#…...

专访越擎科技创始人: 外骨骼的设计与仿真该如何入门

具身智能机器人领域的技术创新如火如荼&#xff0c;从轮式机器人&#xff0c;人形机器人&#xff0c;四足机器狗等不一而足。而从分类来看&#xff0c;外骨骼机器人作为增强人的能力的典型应用&#xff0c;不仅在医疗领域发挥重要作用&#xff0c;在工业应用等场景中也大大的增…...

别再只用交叉熵了!深入对比YOLOv8中Focal Loss与CIoU Loss的改进效果与适用场景

深入解析YOLOv8损失函数优化&#xff1a;Focal Loss与CIoU Loss的实战对比与场景适配 当你在深夜调试YOLOv8模型时&#xff0c;是否遇到过这样的困境&#xff1a;明明增加了训练数据&#xff0c;小目标检测的准确率却始终上不去&#xff1f;或是发现模型对密集排列的物体总是漏…...

轻量级百度搜索结果获取解决方案:让数据获取不再复杂

轻量级百度搜索结果获取解决方案&#xff1a;让数据获取不再复杂 【免费下载链接】python-baidusearch 自己手写的百度搜索接口的封装&#xff0c;pip安装&#xff0c;支持命令行执行。Baidu Search unofficial API for Python with no external dependencies 项目地址: http…...