news 2026/8/24 8:52:54

[SSM]Spring事务

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
[SSM]Spring事务

Spring事务

事务作用: 在数据层保障一系列的数据库操作同成功同失败

Spring事务作用: 在数据层或业务层保障一系列的数据库操作同成功同失败

  1. Spring事务依赖 PlatformTransactionManager 接口
  2. DataSourceTransactionManager对象 是 PlatformTransactionManager的具体实现

入门案例

模拟银行账户间转账业务

需求: 实现任意两个账户间转账操作需求

微缩: A账户减钱,B账户加钱

分析

  1. 数据层提供基础操作,指定账户减钱(outMoney),指定账户加钱(inMoney )
  2. 业务层提供转账操作(transfer),调用减钱与加钱的操作
  3. 提供2个账号和操作金额执行转账操作
  4. 基于Spring整合MyBatis环境搭建上述操作

问题分析

  1. 程序正常执行时,账户金额A减B加,没有问题
  2. 程序出现异常后,转账失败,但是异常之前操作成功, 异常之后操作失败,整体业务出现问题

通过Spring事务管理解决问题

  1. 在业务层接口上添加Spring事务管理

  • Spring注解式事务通常添加在业务层接口中而不会添加到业务层实现类中,降低耦合
  • 注解式事务可以添加到业务方法上表示当前方法开启事务,也可以添加到接口上表示当前接口所有方法开启事务
  1. 设置事务管理器

  • 事务管理器要根据实现技术进行选择
  • MyBatis框架使用的是JDBC事务
  1. 开启注解式事务驱动

事务角色

理解Spring处理事务的原理

  1. 没有开启Spring事务, Dao层的事务是独立的, 程序出现异常后, 业务整体就出现了数据不一致的情况

  1. 开启Spring事务后, Dao层的事务会加入Spring事务, 由Spring同一管理, 异常后就能同一回滚, 保持数据一致

  1. 事务角色: Spring事务被称为事务管理管, 其他事务称为事务协调员

  • 事务管理员: 发起事务方,在Spring中通常指代业务层开启事务的方法
  • 事务协调员: 加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法

Spring为什么可以管理数据层的事务?

因为 注册Spring事务管理器 和 创建Mybatis数据连接 使用的是同一个dataSource(数据源对象)

事务配置

Spring的事务可以进行精细化的配置

public interface AccountService { // readOnly默认值是false, 是读写事务 @Transactional(readOnly=true,timeout=-1) public void transfer(String out,String in ,Double money)throws IoException; }
/** rollbackFor: 设置事务的回滚异常 程序中出现异常, 以下两种异常可以触发事务回滚: 1. Error系列, 比如内存溢出 2. 运行时异常, 比如 xxxException 其他的异常类型不会触发事务的回滚 恰巧io exception不属于运行时异常, 所以默认不触发事务 如果需要的话, 就自己配置一下 */ public interface AccountService { @Transactional(rollbackFor = {IOException.class}) public void transfer(String out,String in ,Double money)throws IoException; }

事务传播行为

转账业务追加日志

需求: 实现任意两个账户间转账操作,并对每次转账操作在数据库进行留痕

需求微缩: A账户减钱,B账户加钱,数据库记录日志分析

  1. 基于转账操作案例添加日志模块,实现数据库中记录日志
  2. 业务层转账操作(transfer),调用减钱、加钱与记录日志功能实现
  3. 效果预期
  • 无论转账操作是否成功,均进行转账操作的日志留痕
  1. 存在的问题
  • 日志的记录与转账操作隶属同一个事务,同成功同失败

  1. 实现效果预期改进
  • 无论转账操作是否成功,日志必须保留

事务传播行为: 事务协调员对事务管理员所携带事务的处理态度

  1. 在业务层接口上添加Spring事务,设置事务传播行为REQUIRES_NEW (需要新事务)

  1. 其他的可选值

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/22 0:16:51

揭秘Open-AutoGLM在金融APP中的应用:如何实现秒级账单查询?

第一章:Open-AutoGLM在金融APP中的应用背景随着金融科技的快速发展,智能化服务已成为金融类APP提升用户体验和运营效率的核心手段。传统规则驱动的客服系统与数据分析模型已难以应对日益复杂的用户需求和市场变化。在此背景下,Open-AutoGLM作…

作者头像 李华
网站建设 2026/8/24 4:26:46

springboot基于大数据的商品推荐系统_n622twx0 爬虫可视化

目录 已开发项目效果实现截图开发技术介绍 核心代码参考示例1.建立用户稀疏矩阵,用于用户相似度计算【相似度矩阵】2.计算目标用户与其他用户的相似度系统测试总结源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 已开发项目…

作者头像 李华
网站建设 2026/8/22 21:24:39

【Open-AutoGLM酒店入住辅助系统】:揭秘AI如何3秒完成登记全流程

第一章:Open-AutoGLM 酒店入住登记辅助在现代酒店管理系统中,自动化与智能化正逐步替代传统人工登记流程。Open-AutoGLM 是一个基于生成式语言模型的智能辅助系统,专为优化酒店前台入住登记设计。该系统能够自动识别客户身份信息、推荐房型、…

作者头像 李华
网站建设 2026/8/23 23:02:39

基于YOLOv10的道路坑洼损坏检测系统(YOLOv10深度学习+YOLO数据集+UI界面+Python项目源码+模型)

一、项目介绍 项目背景: 道路坑洼是城市交通基础设施面临的主要问题之一,严重影响行车安全和道路使用寿命。传统的坑洼检测方法主要依靠人工巡检或车载传感器,存在效率低、成本高和覆盖范围有限等缺点。基于深度学习的目标检测技术可以自动识…

作者头像 李华
网站建设 2026/8/23 6:15:49

LangFlow如何帮助开发者节省90%的LLM编码时间

LangFlow如何帮助开发者节省90%的LLM编码时间 在构建智能客服、自动化内容生成或AI代理系统的今天,越来越多团队开始尝试基于大语言模型(LLM)打造应用。然而,现实往往不如想象中顺畅:即使使用了像LangChain这样的高级框…

作者头像 李华
网站建设 2026/8/24 4:33:03

LangFlow镜像批处理优化:一次处理千条请求降成本

LangFlow镜像批处理优化:一次处理千条请求降成本 在AI应用快速落地的今天,企业对大模型服务的吞吐能力与单位成本提出了前所未有的挑战。一个典型的场景是:某内容平台每天需要生成数万条个性化推荐文案,若采用传统逐条调用方式&am…

作者头像 李华