Spring Boot-9--事务

实现MyBatisPlus与Spring框架的声明式事务管理 本文还有配套的精品资源,点击获取 简介:本文教程详细介绍了如何在Java Web应用程序中实现声明式事务管理,特别是结合了MyBatisPlus和Spring框架。MyBatisPlus扩展了MyBatis的功能并简化了操作,而Spring框架提供了强大的依赖注入和事务管理。通过配置文件和注解,开发者可以轻松地定义事务边界,使事务管理更加简洁和易于维护。教程涵盖集成MyBa... 阅读详情

通常我们单元测试为了保证每个测试之间的数据独立,会使用@Rollback注解让每个单元测试都能在结束时回滚。而真正在开发业务逻辑时,我们通常在service层接口中使用@Transactional来对各个业务逻辑进行事务管理的配置。

事务详解

上面的例子中我们使用了默认的事务配置,可以满足一些基本的事务需求,但是当我们项目较大较复杂时(比如,有多个数据源等),这时候需要在声明事务时,指定不同的事务管理器。。在声明事务时,只需要通过value属性指定配置的事务管理器名即可,例如:@Transactional(value="transactionManagerPrimary")。

除了指定不同的事务管理器之后,还能对事务进行隔离级别和传播行为的控制,下面分别详细解释:

#### 隔离级别

隔离级别是指若干个并发的事务之间的隔离程度,与我们开发时候主要相关的场景包括:脏读取、重复读、幻读。

我们可以看org.springframework.transaction.annotation.Isolation枚举类中定义了五个表示隔离级别的值:

public enum Isolation {
    DEFAULT(-1),
    READ_UNCOMMITTED(1),
    READ_COMMITTED(2),
    REPEATABLE_READ(4),
    SERIALIZABLE(8);
}
  • DEFAULT:这是默认值,表示使用底层数据库的默认隔离级别。对大部分数据库而言,通常这值就是:READ_COMMITTED。
  • READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。
  • READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。
  • REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。
  • SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。

指定方法:通过使用isolation属性设置,例如:

@Transactional(isolation = Isolation.DEFAULT)
传播行为

所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。

我们可以看org.springframework.transaction.annotation.Propagation枚举类中定义了6个表示传播行为的枚举值:

public enum Propagation {
    REQUIRED(0),
    SUPPORTS(1),
    MANDATORY(2),
    REQUIRES_NEW(3),
    NOT_SUPPORTED(4),
    NEVER(5),
    NESTED(6);
}

  • REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
  • SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。
  • MANDATORY:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。
  • REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则把当前事务挂起。
  • NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。
  • NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。
  • NESTED:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于REQUIRED。

指定方法:通过使用propagation属性设置,例如:

@Transactional(propagation = Propagation.REQUIRED)


全新DEIM有效涨点改进目录 | 本专栏持续更新500+篇内容 | 包含各种顶会顶刊卷积、注意力、特征融合模块、有效特征聚合提取模块,上采样模块、下采样模块,二次创新模块、独家创新等几百种创新点改进 🚀【CVPR2025DEIM改进专栏速览】🔥 专栏提供500+篇目标检测创新改进方案,涵盖卷积/注意力/特征融合等创新改进点,均源自顶会论文及实战经验。支持多领域应用(工业/医疗/遥感等),配套完整教程和答疑服务。亮点包括: 1️⃣ 持续更新SOTA模型改进方案 2️⃣ 小白友好型实验操作指南 3️⃣ 跨学科科研支持(已助非计算机专业发表论文) 4️⃣ 提供虚拟环境配置方案。 订阅可获完整项目代码及交流群服务,适合研究生科研论文改进需求。价格呈上涨趋势,早订更优惠! 阅读详情

相关推荐

告别云端依赖:手把手教你在Windows 10/11上离线部署WhisperDesktop(含模型下载避坑指南)

本文详细介绍了如何在Windows 10/11上离线部署WhisperDesktop,包括硬件要求、模型下载、环境配置和实战应用。通过本地部署,用户可以实现高效的语音转文字功能,无需依赖云端服务,特别适合注重数据隐私和需要离线工作的场景。

weixin_33736048的博客 322

Spring Cloud Spring Boot mybatis分布式微服务云架构(三十二)事务管理(2)

事务详解 上面的例子中我们使用了默认的事务配置,可以满足一些基本的事务需求,但是当我们项目较大较复杂时(比如,有多个数据源等),这时候需要在声明事务时,指定不同的事务管理器。对于不同数据源的事务管理配置可以见《Spring Boot多数据源配置与使用》中的设置。在声明事务时,只需要通过va...

chivy2016的博客 343

东方财富网股票API逆向分析:手把手教你破解动态参数(2024最新版)

本文详细解析了2024年东方财富网股票API的动态参数生成机制,包括回调函数、身份验证和时效控制参数的逆向工程方法。通过实战代码演示,帮助开发者破解动态参数,实现高效稳定的股票数据爬取,适用于金融数据分析和量化交易场景。

weixin_29091105的博客 1024

Mybatis事务管理

读已提交`级别:事务只能读取其他事务已经提交的内容,相当于直接从数据中读取数据,这样就可以避免**脏读**问题了,虽然它避免了脏读问题,但是如果事件B修改并提交了数据,那么实际上事务A之前读取到的数据依然不是最新的数据,直接导致两次读取的数据不一致,这种现象称为**虚读**也可以称为**不可重复读**比如,两个人同时报名一个活动,两个报名的事务同时在进行,但是他们一开始读取到的人数都是5,而这时,它们都会认为报名成功后人数应该变成6,而正常情况下应该是7,因此这个时候就发生了数据的**幻读**现象。

weixin_51992178的博客 1409

433M无线遥控器EV1527协议解码实战:从逻辑分析到代码优化

本文详细解析了433M无线遥控器EV1527协议的实战解码过程。从使用逻辑分析仪抓取波形、理解同步头与数据位编码原理开始,逐步深入代码实现。文章重点对比了原始定时器轮询法的痛点,并提出了基于“边沿捕获+时间戳”的优化方案,构建了高效、可移植且具备抗干扰能力的解码引擎,最后分享了跨平台移植的核心技巧。

weixin_29168813的博客 926

实战|2026美团&大众点评餐饮数据抓取:Playwright/Selenium反爬全攻略

核心结论:2026年美团&大众点评的反爬核心是“多维度风控”,需组合使用“住宅IP+设备指纹伪装+真人行为模拟+动态验证处理”,Playwright是最优工具,Selenium仅作为补充。效率优化:单机爬取速度建议控制在“每小时500-800条”,避免高频请求触发风控;分布式爬取需确保每个节点使用独立住宅IP,且行为轨迹不一致。扩展方向集成WASM解密工具,破解2026年美团的Token加密;用AI识别动态点选验证,提升验证通过率;对接大数据平台,对抓取的餐饮数据进行可视化分析。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2461

Mybatis 使用事务的多种方式

Mybatis 使用事务的多种方式

qq_33286757的博客 6686

10、数据挖掘与轨迹生成技术:FSSEMiner与CondTraj - GAN的探索

本文介绍了两种先进的数据处理技术:FSSEMiner算法用于从动态属性图中挖掘频繁顺序子图演化模式,揭示如交通流和疾病传播等复杂系统的演化规律;CondTraj-GAN是一种端到端的条件生成对抗网络,能够生成高质量的合成车辆轨迹,解决真实轨迹数据因隐私问题难以获取的挑战。通过实验评估与真实数据集验证,两种技术在可扩展性、实用性及生成质量方面均表现出色,并在交通管理、城市规划、自动驾驶研发等领域具有广泛应用前景。

grafana8visual的博客 87

MyBatis源码系列之七:MyBatis的事务管理

欢迎来到MyBatis源码系列的第七篇文章。在前面的文章中,我们深入探讨了MyBatis的总览和环境准备,配置文件的解析过程,SqlSessionFactory的创建,SqlSession的工作原理,以及执行器Executor的实现细节。本篇文章将继续深入研究MyBatis的事务管理机制。

Dingxiaowei77的专栏 646

大模型选型实战:为OpenClaw匹配最优“大脑”的全维度考量

大模型不是越贵越好,也不是参数越高越好,适合自己的使用场景才是最好的。按照我的方法,先明确自己的需求,再选对应的模型,配置多模型自动路由,既能保证体验,又能最大限度降低成本。我自己用这套配置用了半年多,不管是写文章、写代码还是处理复杂问题,都完全够用,成本也很低,大家可以参考一下。如果不知道选什么模型,可以在评论区说一下你的使用场景。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 343

SAP BW/4HANA 项目字段级数据血缘分析的方法与工具

利用SAP自带工具可以在一定程度上查看数据流和字段使用情况,但往往需要人工逐步深挖。适用于简单场景或验证单个字段的映射。借助SAP数据治理解决方案(如 Information Steward、Data Intelligence 等)能够自动整合元数据,提供图形化、跨系统的血缘分析,适合对数据 lineage 有严格要求的企业级项目。第三方工具则提供了灵活强大的功能,如自动文档、生成功能丰富的报告,对于复杂环境下的血缘分析和影响分析非常有帮助。自行开发SQL/CDS脚本。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 470

9.Spring Boot事务(@Transactional)

使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依赖的时候,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,并进行一系列的事务初始化操作,所以不需要任何额外配置就可以用@Transactional注解进行事务的使用。

相互学习 共同进步 384

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

2023.12.9 关于 Spring Boot 事务传播机制详解

事务传播机制 七大事务传播机制 支持当前调用链上的事务 Propagation.REQUIRED Propagation.SUPPORTS Propagation.MANDATORY 不支持当前调用链上的事务 Propagation.REQUIRES_NEW Propagation.NOT_SUPPORTED Propagation.NEVER 嵌套事务 Propagation.NESTED 前置工作 初始化数据库 初始化 实体类 初始化 Mapper 接口 初始化 XML

weixin_63888301的博客 1688

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Baeldung Java 周评 | 第五十一弹(关键词:Java 过去/现在及未来、企业级 Java 事务隔离、封装 Spring Bean、Java 9 货币 API、从0 到 Security)

开篇词 尤金的第 51 篇 Java 周评,诞生了!   Java 以及 Spring 相关 Java 过去、现在及未来 Java 生态系统就像瑞典?那个说法有点困惑吗?是的,我们需要听听 Brian Goetz 谈论 Java 语言,平台和生态系统如何向前发展。 如果有人可以在这个问题上聪明地发表讲话,那就是布莱恩·格茨。 如果你是 Java 开发人员(并且我假设你是),那么了解平...

纽雪澳诺加海美德的博客 581

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Spring Boot 3.2.x + 人大金仓 V9 + 多数据源 完整配置指南(全网最细,可直接复制)

本文完整覆盖Spring Boot 3.2.x + 人大金仓 V9 多数据源手动配置:控制粒度细,适合复杂事务场景动态数据源:简单高效,注解驱动,推荐绝大多数项目同时解决驱动、分页、事务、乱码等核心坑点,适配国产化 / 混合数据库场景,代码可直接复制到项目,大幅降低开发成本!下期预告:《Spring Boot 3.2.x + 人大金仓 V9 读写分离 + 分库分表实战》,关注不迷路!

雨辰AI的博客 863

Spring Boot微服务分布式系统面试宝典:从基础到实战,9轮深度技术探讨(含答案解析)

互联网大厂面试官老张正在面试程序员cc,围绕Java生态技术栈展开深度技术探讨。

会写代码的斯皮尔伯格 801

你指定 kill -9 pid 有多危险吗?

你知道的越多,不知道的就越多,业余的像一棵小草!你来,我们一起精进!你不来,我和你的竞争对手一起精进!编辑:业余草blog.csdn.net/qq_33220089/article/de...

xmt1139057136的专栏 1272

Spring Boot 3.x开发中只读事务中的写操作检测延迟问题

摘要: Spring Boot 3.x开发中,使用@Transactional(readOnly = true)标记只读事务时,若意外执行写操作(如save/update),异常可能延迟到事务提交时才抛出,导致调试困难和数据风险。问题根源在于JPA持久化上下文的延迟刷新机制和数据库驱动的差异行为。解决方案包括:严格分离读写操作、使用AOP提前拦截写方法、配置Hibernate禁止只读事务修改、增强测试覆盖等。最佳实践建议明确事务边界、代码审查和监控日志,确保只读事务的纯净性。

深山技术宅的博客 1881

Seata 整合达梦 DM9 实战:吃透 AT/XA 两种分布式事务方案

服务端适配:完成了 Seata Server 存储层的达梦适配,提供了可直接执行的建表语句与配置AT 模式:通过自动回滚日志实现低侵入、高性能的最终一致性分布式事务,适用于绝大多数业务场景XA 模式:基于达梦原生 XA 协议实现强一致性事务,适用于金融、账务等高可靠要求场景避坑指南:总结了生产环境 5 大高频踩坑点与解决方案,提前规避上线风险运维规范:提供了日常巡检、性能优化、故障排查的标准化流程,满足生产运维与合规要求。

雨辰AI的博客 534

【金仓数据库征文】从“能下单”到“不超卖”:Spring Boot + KingbaseES 事务订单接口实战

本文记录了一次基于Spring Boot和KingbaseES的本地模拟实验,重点验证订单系统中的事务处理、幂等控制和并发扣库存功能。实验环境采用Spring Boot 3.3.5、Spring JDBC与KingbaseES V9数据库,通过五张核心表(商品、库存、订单、订单明细和库存流水)构建完整业务流程。实验过程中发现初始库存设置偏差问题,强调了数据库状态验证的重要性。文章详细展示了正常下单、事务回滚、请求幂等和并发扣减等场景的验证步骤,并通过SQL查询和接口返回的交叉验证确保结果可靠性。

月亮永悬不落,剑指巅峰 1万+

Spring核心技术目录

  Spring核心技术文章无特殊说明下都是基于Spring boot 2.5.4,Spring 5.3.9 的版本。 Spring启动流程 Spring事务 Spring AOP

ALONG的博客 297

发现谁用 kill -9 关闭程序就开除!

kill -9是最后的核按钮,不是常规操作。生产上关停服务,正确顺序应该是:发SIGTERMkill -15确认服务停止;清理残留资源;再重新启动。这点看似小事,实际上体现了一个工程师的职业素养。你可以写再多的业务逻辑,但只要线上一个kill -9下去,日志没了、数据坏了、锁卡了,别人只会说一句——“这是谁写的程序?所以啊,除非你是在救火,否则别碰 kill -9。真要杀,也得知道自己在干啥。

程序员高级码农的博客 349

Spring框架核心原理与实战优化指南

控制反转(IoC)和面向切面编程(AOP)是现代Java框架的核心设计思想。IoC容器通过依赖注入(DI)管理对象生命周期,实现组件解耦;AOP则通过动态代理实现横切关注点分离。Spring框架将这两种思想完美结合,其BeanFactory和ApplicationContext构成了高效的依赖关系管理系统。在企业级开发中,Spring的事务管理、MVC架构和Security模块大幅提升了开发效率。最新版本的Spring Boot 3.x通过GraalVM原生镜像支持,使启动速度提升显著,同时优化了CGLIB

weixin_33898876的博客 374

Spring Boot 3.x 在 IDEA 中整合 MyBatis 的7个致命错误:92%开发者踩过第4个,你中招了吗?

避开Spring Boot 3.x在IDEA中整合MyBatis的7个致命错误,尤其第4个高频陷阱。涵盖依赖配置、Mapper扫描、事务管理等关键步骤,确保项目启动成功、SQL正常执行。适用于新版本开发与升级场景,稳定性与兼容性双保障,值得收藏。

Instrulink的博客 190

-bash: kill: (17837) - 不允许的操作_还在使用kill -9 pid结束spring boot项目吗?不妨试试这几种优雅的方式!...

目录kill -9 pid ???kill -9 pid 带来的问题优雅结束服务kill -15 pidConfigurableApplicationContext colseactuator数据备份操作kill -9 pid ???kill可将指定的信息送至程序。预设的信息为SIGTERM(15),可将指定程序终止。若仍无法终止该程序,可使用SIGKILL(9)信息尝试强制删除程序。程序或工作的...

weixin_36206609的博客 4453
上一篇: Spring Boot8--log4j日志记录
下一篇: Spring Boot10--AOP的使用(本例展示统一处理Web请求日志)
JavaMrSun
博客等级 码龄9年 27粉丝 64原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值