news 2026/4/23 14:33:05

[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/4/23 14:46:35

springboot企业物资采购销售管理系统多个角色1z1ch1k0

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

作者头像 李华
网站建设 2026/4/23 14:49:41

LangFlow镜像Reddit舆情监控:发现热点话题与危机预警

LangFlow构建Reddit舆情监控系统:从热点发现到危机预警 在当今信息爆炸的时代,社交媒体已成为公众情绪的“晴雨表”。以Reddit为例,这个拥有数万个子版块、日均活跃用户超5000万的平台,每天都在产生海量的讨论内容——从新产品发…

作者头像 李华
网站建设 2026/4/23 14:41:54

多模态内容智能生成系统:让AI“看懂”世界,也能“说”给你听

你有没有想过,未来的AI不仅能读懂文字,还能看图、听声、甚至理解视频?这背后,其实靠的是一种叫“多模态内容智能生成系统”的技术。听起来高大上,但它的核心理念其实很简单:让AI像人一样,用多种…

作者头像 李华
网站建设 2026/4/12 22:19:43

springboot基于微信小程序的一起运动健身活动招募平台的设计与实现_0mle9m37

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

作者头像 李华