news 2026/6/10 15:40:21

[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/6/10 14:26:56

springboot农产品物流运输系统_250ievu7

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

作者头像 李华
网站建设 2026/6/10 11:59:37

springboot农场农业种植技术管理平台_r790r803_048

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

作者头像 李华
网站建设 2026/6/10 10:54:31

订单状态不一致难题终结者?Open-AutoGLM分布式事务一致性实现路径揭秘

第一章:订单状态不一致难题的行业背景与挑战在现代分布式电商系统中,订单状态不一致已成为影响用户体验与业务准确性的核心痛点。随着微服务架构的普及,订单、支付、库存等模块被拆分至独立服务,跨系统调用频繁,网络延…

作者头像 李华
网站建设 2026/6/10 10:59:42

C#:轻松实现Excel到TXT的转换

在数据处理领域,Excel文件以其强大的功能占据着举足轻重的地位。然而,在诸多应用场景下,我们却需要将这些结构化的Excel数据转换为更为简洁、通用的文本文件(TXT)。这背后往往隐藏着数据清洗、导入旧系统、简化数据结构…

作者头像 李华