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

springBoot中使用事务的隔离与回滚

在 Spring Boot 中,事务的隔离和回滚是保障数据一致性和完整性的重要机制。下面将详细介绍如何在 Spring Boot 里使用事务的隔离和回滚。

1. 环境准备

首先要确保 Spring Boot 项目中添加了 Spring Data JPA 或其他持久化框架的依赖,同时配置好数据库连接。以 Maven 为例,在 pom.xml 中添加如下依赖:

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId></dependency><dependency><groupId>com.h2database</groupId><artifactId>h2</artifactId><scope>runtime</scope></dependency>
</dependencies>

2. 开启事务管理

在 Spring Boot 主应用类上添加 @EnableTransactionManagement 注解,以此开启事务管理功能:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;@SpringBootApplication
@EnableTransactionManagement
public class YourApplication {public static void main(String[] args) {SpringApplication.run(YourApplication.class, args);}
}

3. 事务隔离级别设置

在服务层方法上使用 @Transactional 注解,通过 isolation 属性设置事务隔离级别。以下是不同隔离级别的使用示例:

读未提交(Read Uncommitted)
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactional(isolation = Isolation.READ_UNCOMMITTED)public void readUncommittedTransaction() {// 业务逻辑代码}
}
读已提交(Read Committed)
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactional(isolation = Isolation.READ_COMMITTED)public void readCommittedTransaction() {// 业务逻辑代码}
}
可重复读(Repeatable Read)
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactional(isolation = Isolation.REPEATABLE_READ)public void repeatableReadTransaction() {// 业务逻辑代码}
}
串行化(Serializable)
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Isolation;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactional(isolation = Isolation.SERIALIZABLE)public void serializableTransaction() {// 业务逻辑代码}
}

4. 事务回滚设置

@Transactional 注解默认会在遇到 RuntimeException 及其子类时进行事务回滚,也可以通过 rollbackFor 属性指定需要回滚的异常类型,使用 noRollbackFor 属性指定不需要回滚的异常类型。

默认回滚
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactionalpublic void defaultRollbackTransaction() {// 业务逻辑代码throw new RuntimeException("模拟异常");}
}
指定回滚异常类型
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactional(rollbackFor = Exception.class)public void customRollbackTransaction() throws Exception {// 业务逻辑代码throw new Exception("模拟异常");}
}
指定不回滚异常类型
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactional(noRollbackFor = IllegalArgumentException.class)public void noRollbackTransaction() {// 业务逻辑代码throw new IllegalArgumentException("模拟异常");}
}

总结

  • 利用 @EnableTransactionManagement 注解开启 Spring Boot 的事务管理功能。
  • 在服务层方法上使用 @Transactional 注解设置事务隔离级别和回滚规则。
  • 默认情况下,遇到 RuntimeException 及其子类时事务会回滚,可通过 rollbackFornoRollbackFor 属性自定义回滚规则。

相关文章:

springBoot中使用事务的隔离与回滚

在 Spring Boot 中&#xff0c;事务的隔离和回滚是保障数据一致性和完整性的重要机制。下面将详细介绍如何在 Spring Boot 里使用事务的隔离和回滚。 1. 环境准备 首先要确保 Spring Boot 项目中添加了 Spring Data JPA 或其他持久化框架的依赖&#xff0c;同时配置好数据库连…...

HHJS项目记录

1、插入 支出合同 与 进项发票的上下车关系 MERGE INTO T_BOT_Relation a USING (SELECT invoice.fid AS invoiceID, contract.fid AS contractid FROM T_CON_Invoice invoice INNER JOIN T_CON_Contract AS contract ON contract.FNUMBER invoice.FContractNo ) t ON (a.FDe…...

【Altium Designer】设计技巧

目录 技巧一&#xff1a;铺铜连接方式 技巧二&#xff1a;铺铜连接方式 技巧一&#xff1a;铺铜连接方式 Design -> Rules -> PolygonConnect 三种选择&#xff1a; 1&#xff09;Relief Connect&#xff1a;十字连接&#xff0c;可选择是45还是90 2&#xff09;Direct…...

基于FPGA的3U机箱模拟量高速采样板ADI板卡,应用于轨道交通/电力储能等

板卡简介&#xff1a; 本板为模拟量高速采样板&#xff08;ADI&#xff09;&#xff0c;主要用于电机转速和相电流检测&#xff0c;以实现电机闭环控制。 性能规格&#xff1a; 电源&#xff1a;DC5V&#xff0c;DC3.3V&#xff0c;DC15V&#xff0c;DC24V FPGA&#xff1a;…...

6. 顺序表和链表*****

目录 1. 顺序表 1.1 原理 1.2 常见的增删查改 1.3 顺序表的问题 2. 链表 2.1 原理 2.2 无头单向非循环的增删查改 2.3 链表面试题 1. 删除链表中等于给定值val的所有节点203. 移除链表元素 2. 链表逆置206. 反转链表&#xff08;考的最多&#xff09; 3.给你单链表的…...

Vue3 + TS组件封装指南

在 Vue 3 TypeScript 中封装组件时&#xff0c;需要注意以下几点&#xff1a; 1. Props 定义 使用 defineProps 或 PropType 定义组件的 props&#xff0c;并为其添加类型。 示例&#xff1a; import { defineComponent, PropType } from vue;export default defineComponen…...

【AVRCP】蓝牙协议栈深度解析:AVCTP互操作性核心机制与实现细节

目录 一、事务标签&#xff08;Transaction Label&#xff09;机制 1.1 事务标签核心规则 1.2 事务标签作用域与并发性 1.3 实现建议与陷阱规避 1.4 协议设计思考 1.5 调试与验证 二、消息分片&#xff08;Fragmentation&#xff09;机制 2.1 分片触发条件 2.2 分片支…...

【MySQL】基本查询(下)

文章目录 1.筛选分页结果2.Update3.Delete4.截断表5.插入查询结果6.聚合函数6.1什么是聚合函数6.2常见的聚合函数 7.group by7.1如何显示每个部门的平均工资和最高工资7.2显示每个部门的每种岗位的平均工资和最低工资7.3显示平均工资低于2000的部门和它的平均工资 8.总结 1.筛选…...

Xpath Helper 替代 - XPath 测试器

Xpath Helper 最近开始&#xff08;2025.03&#xff09;无法使用了&#xff0c;选找了几款替代品&#xff0c;XPath 测试器 是目前看来最好的。 XPath 测试器 市场地址&#xff1a; https://chromewebstore.google.com/detail/xpath-测试器/cneomjecgakdfoeehmmmoiklncdiodmh …...

C++学习之云盘项目nginx

1.复习 2.知识点概述 1. 一些基本概念 1.1 Nginx 初步认识 1.2 正向 / 反向代理 1.3 域名和 IP 2. Nginx 安装和配置 2.1 安装 2.2 配置 3. Nginx 的使用 3.1 部署静态网页 3.2 反向代理和负载均衡 课外知识导读 1. URL 和 URI 2. DNS 解析过程 1. 一些基…...

JAVA学习*抽象类

抽象类 在Java中&#xff0c;被abstract关键字修饰的类被称为抽象类。 特点 1、当一个类继承了抽象类&#xff0c;一定要重写抽象方法&#xff01;&#xff01;&#xff01; public abstract class Animal {public int age;public String name;//抽象方法public abstract v…...

数据库管理-第303期 数据库相关硬件文章汇总(20250319)

数据库管理303期 2025-03-19 数据库管理-第303期 数据库相关硬件文章汇总&#xff08;20250319&#xff09;1 CPU & 内存2 SSD3 RDMA4 存储5 CXL6 硬件采购7 数据库一体机总结 数据库管理-第303期 数据库相关硬件文章汇总&#xff08;20250319&#xff09; 作者&#xff1…...

WPF 开发从入门到进阶(五)

一、WPF 简介与开发环境搭建 1.1 WPF 概述 Windows Presentation Foundation&#xff08;WPF&#xff09;是微软推出的用于构建 Windows 桌面应用程序的强大 UI 框架。它融合了矢量图形、动画、多媒体等多种技术&#xff0c;能让开发者创建出具有高度视觉吸引力和交互性的应用…...

高级java每日一道面试题-2025年3月04日-微服务篇[Eureka篇]-Eureka是什么?

如果有遗漏,评论区告诉我进行补充 面试官: Eureka是什么&#xff1f; 我回答: 在Java高级面试中&#xff0c;关于Eureka的讨论通常会涵盖其基本概念、组件与架构、工作原理、高级特性以及与其他服务发现工具的比较等多个方面。以下是结合提供的内容对Eureka进行的详细解析和…...

OctoTools:一个具有复杂推理可扩展工具的智体框架

25年2月来自斯坦福大学的论文“OctoTools: An Agentic Framework with Extensible Tools for Complex Reasoning”。 解决复杂的推理任务可能涉及视觉理解、域知识检索、数值计算和多步骤推理。现有方法使用外部工具增强大语言模型 (LLM)&#xff0c;但仅限于专业领域、有限的…...

uniapp-x web 开发警告提示以及解决方法

defineModel props...

html5表格实战-跨行跨列

效果如图 代码如图...

前端开发概论

HTML,CSS,JS三者关系 html是骨架&#xff0c;决定呈现什么内容&#xff0c;而css定义样式&#xff0c;是华丽的外衣&#xff0c;javascript是操作逻辑&#xff0c;实现按钮等等&#xff0c;是人的灵魂 HTML文件存储着一个网页的骨架&#xff0c;CSS则是外衣&#xff0c;javas…...

Canary

定义&#xff1a; Canary是一种用以防护栈溢出的保护机制。 原理&#xff1a; 是在一个函数的入口处&#xff0c;先从fs/gs寄存器中取出一个4字节&#xff08;eax,四字节通常是32位的文件&#xff09;或者8字节&#xff08;rax&#xff0c;通常是64位的文件&#xff09;的值…...

c++领域展开第十七幕——STL(vector容器的模拟实现以及迭代器失效问题)超详细!!!!

文章目录 前言vector——基本模型vector——迭代器模拟实现vector——容量函数以及push_back、pop_backvector——默认成员函数vector——运算符重载vector——插入和删除函数vector——实现过程的问题迭代器失效memcpy的浅拷贝问题 总结 前言 上篇博客我们已经详细介绍了vecto…...

BUUCTF Pwn babyheap_0ctf_2017 Unsorted bin attack部分

checksec exeinfo 开启了全保护 64位 查看函数&#xff1a; 堆题 增删查改齐了 可以在编辑堆的时候重新设置大小 存在堆溢出 delete函数的指针清零了 无UAF 想法是通过unsorted bin泄露libc基址&#xff1a; from pwn import *p process(./babyheap) #p remote("node…...

【C++指南】内存管理完全手册:new/delete

&#x1f31f; 各位看官好&#xff0c;我是egoist2023&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C内存管理的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享…...

Vue3组合式函数(滚动监测 useScroll)

主要用于实时监测目标元素滚动位置及状态 工具函数源码 /*** 组合式函数* 实时监测目标元素滚动位置及状态** 自定义钩子用于处理滚动事件和状态* param target 滚动目标元素&#xff0c;可以是 Ref、HTMLElement、Window 或 Document&#xff0c;默认为 window* param throt…...

Vue.js+Element UI 登录界面开发详解【附源码】

成果图&#xff1a; 一、技术架构解析 本登录模块采用前后端分离架构&#xff0c;前端基于Vue.jsElement UI实现交互逻辑&#xff0c;主要包含以下技术要点&#xff1a; ​组件化开发 - 采用单文件组件形式组织代码​响应式设计 - 实现多终端适配​状态管理 - 使用sessionSto…...

瑞幸需要宇树科技

吃不到“星巴克红利”&#xff0c;瑞幸活成“Manner”。 作者|古廿 编辑|杨舟 “是不是又要开始3月革命了。”有瑞幸员工透露&#xff0c;今年开始瑞幸加强了系统排班的执行力度。新的排班体系下&#xff0c;要求各时段门店实际值班人员和排班系统一致。如果需要调整&#xf…...

linux 命令 vim

以下是 Linux 中 Vim 编辑器的核心命令总结&#xff0c;分为基础操作、高效编辑技巧和实用场景&#xff0c;助你快速掌握 1. 启动与退出 命令说明vim 文件名打开或新建文件vim 行号 文件名打开文件并跳转到指定行&#xff08;如 vim 10 file.txt&#xff09;:q退出 Vim&#…...

JS—基本数据类型和引用数据类型:1分钟掌握两者的区别

个人博客&#xff1a;haichenyi.com。感谢关注 一. 目录 一–目录二–分类三–核心区别四–实际场景中的问题五–总结对比 二. 分类 前面说过这么判断数据类型&#xff0c;今天来说说基本数据类型和引用数据类型的区别。 基本数据类型引用数据类型StringObjectNumberFunct…...

计算机网络的框架结构

计算机网络课程知识体系框架 一、计算机网络基础概念 1.1 网络组成要素 端系统&#xff08;主机、服务器&#xff09;通信链路&#xff08;有线/无线介质&#xff09;交换设备&#xff08;路由器、交换机&#xff09;协议体系&#xff08;TCP/IP协议簇&#xff09; 1.2 网络…...

解决MySQL字符集冲突引发的“Illegal mix of collations”错误

引言 在开发过程中&#xff0c;我们常常会遇到数据库层面的字符集兼容性问题。本文将通过一个典型的案例&#xff0c;分析因字符集不匹配导致的 Illegal mix of collations 错误&#xff0c;并提供完整的解决方案&#xff0c;帮助开发者彻底规避此类问题。 问题现象 假设我们…...

Vue中的publicPath释义

publicPath 部署应用包时的基本URL。用法和 webpack 本身的 output.publicPath 一致&#xff0c;但是 Vue CLI 在一些其他地方也需要用到这个值&#xff0c;所以请始终使用 publicPath 而不要直接修改 webpack 的 output.publicPath。 默认情况下&#xff0c;Vue CLI 会假设你…...