news 2026/2/7 3:19:42

[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/2/2 16:02:31

基于单片机的指纹采集识别系统设计

一、系统整体设计方案 基于单片机的指纹采集识别系统旨在实现快速、准确的个人身份验证,适用于门禁控制、考勤管理、安全登录等场景。系统采用模块化设计,分为五大核心模块:指纹采集模块、核心控制模块、数据存储模块、识别处理模块及人机交…

作者头像 李华
网站建设 2026/2/4 1:33:26

2025年亲测3款AI写作工具,效率翻倍不踩坑!

创作一篇长篇小说需要分几步?了解AI写作工具后,我发现创作不再是一个人的孤军奋战,而是一个“专业团队”的鼎力相助。我最近创作了《魔纹废柴:觉醒混沌神印》的故事,刚开始毫无头绪,用了AI写网文工具确定了…

作者头像 李华
网站建设 2026/2/1 16:18:39

基于VUE的化肥销售管理系统[VUE]-计算机毕业设计源码+LW文档

摘要:化肥销售业务在农业供应链中占据关键地位,随着信息化时代的到来,传统的人工销售管理方式已难以满足业务需求。本文阐述了一款基于VUE框架开发的化肥销售管理系统,详细分析了系统的需求,介绍了技术架构、功能模块设…

作者头像 李华
网站建设 2026/2/2 16:02:22

从“卷价格”到“卷材料”,原材料升级正在重塑紧固件行业

在全球制造业结构持续调整、供应链不确定性显著上升的背景下,紧固件这一基础工业品正经历一场从成本驱动向质量驱动的深刻转型。作为紧固件生产中最核心的上游要素之一,线材与原材料的选择与管理,正从过去单纯围绕价格波动的“卷价格”竞争&a…

作者头像 李华
网站建设 2026/2/7 0:07:38

LangFlow镜像对话策略引擎:智能决定下一步动作

LangFlow镜像对话策略引擎:智能决定下一步动作 在企业级AI系统开发中,一个反复出现的挑战是——如何快速构建、验证并迭代复杂的对话决策逻辑?尤其是在客服、智能助手、自动化流程等场景下,系统不仅要理解用户意图,还要…

作者头像 李华
网站建设 2026/2/5 23:35:37

企业级RAG实战攻略:彻底解决大模型落地的’最后一公里’难题,实现数据私有化与实时更新!

简介 企业级大模型落地面临幻觉、数据私有化和时效性等"最后一公里难题"。RAG技术作为解决这些问题的关键,通过检索增强生成大幅降低错误率,实现数据私有化和实时更新。生产级RAG系统需构建为多模块协同工程体系,包括数据预处理、检…

作者头像 李华