Spring中的事务管理

这篇具有很好参考价值的文章主要介绍了Spring中的事务管理。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、事务管理

1.事务回顾

  1. 概念
  • 事务是一组操作的集合,它是一个不可分割的工作单位,这些操作要么同时成功,要么同时失败
  1. 操作
  • 开启事务(一组操作开始前,开启事务) : start transaction / begin ;
  • 提交事务(这组操作全部成功后,提交事务) : commit ;
  • 回滚事务(中间任何一个操作出现异常,回滚事务): rollback ;

2.Spring事务管理

1. 前言

  • 假如有一个公司,我们在做部门调整时删除一个部门,就要删除部门下的所有员工,否则会有造成数据的不一致。

2. 处理之后的代码

顺带加上一个根据部门id删除员工的功能:
  • Sevices代码:
@Service
public class DeptServiceImpl implements DeptService {

    @Autowired
    private DeptMapper deptMapper;

    @Autowired
    private EmpMapper empMapper;

    @Override
    public void delete(Integer id) {
        deptMapper.deleteId(id);  //根据id删除部门
        empMapper.deleteByDeptId(id);   ;  //根据部门id删除该部门下的员工
    }
}
  • Mapper层代码:
public interface EmpMapper {

    /**
     * 根据部门Id删除员工信息
     * @param deptId
     */
    @Delete("delete from emp where dept_id = #{deptId} ")
    void deleteByDeptId(Integer deptId);
}

上述代码段出现异常情况就会导致数据不一致–部门已经删除了,但是部门下的员工并未删除,就会造成数据的不一致。
此时可以使用Springboot事务管理注解``@Transactional`来处理。

3. Springboot事务管理–@Transactional注解

  • 位置:业务(service)层的方法上、上、接口
  • 作用:将当前方法交给spring进行事务管理,方法执行前,开启事务;成功执行完毕,提交事务;出现异常,回滚事务
    @Transactional  //交给Spring进行事务管窥
    @Override
    public void delete(Integer id) {
        deptMapper.deleteId(id);  //根据id删除部门
        empMapper.deleteByDeptId(id);   ;  //根据部门id删除该部门下的员工
    }

  • 开启Spring日志管理的开关(yml文件):
#spring事务管理日志
logging:
  level:
    org.springframework.jdbc.support.JdbcTransactionManager: debug

3.事务进阶

1.属性回滚rollbackFor

  • 默认情况下,只有出现RuntimeException才回滚异常。rollbackFor属性用于控制出现何种异常类型,回滚事务。
	@Transactional (rollbackFor = Exception.class)  //设置此属性就会将所有的异常都会回滚(否则只会回滚RuntimeException此类异常)
    @Override
    public void delete(Integer id) {
        deptMapper.deleteId(id);  //根据id删除部门
        empMapper.deleteByDeptId(id);   ;  //根据部门id删除该部门下的员工
    }

2.属性传播行为propagation

  • 事务传播行为:指的就是当一个事务方法被另一个事务方法调用时,这个事务方法应该如何进行事务控制。
属性值 含义
REQUIRED 【默认值】需要事务,有则加入,无则创建新事务
REQUIRES_NEW 需要新事务,无论有无,总是创建新事务
SUPPORTS 支持事务,有则加入,无则在无事务状态中运行
NOT_SUPPORTED 不支持事务,在无事务状态下运行,如果当前存在已有事务,则挂起当前事务
MANDATORY 必须有事务,否则抛异常
NEVER 必须没事务,否则抛异常
··· ···

REQUIRED∶:大部分情况下都是用该传播行为即可。
REQUIRES_NEW:当我们不希望事务之间相互影响时,可以使用该传播行为。比如:下订单前需要记录日志,不论订单保存成功与否,都需要保证日志记录能够记录成功。文章来源地址https://www.toymoban.com/news/detail-517999.html

到了这里,关于Spring中的事务管理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • MyBatis第十一讲:MyBatis事务管理机制详解

    本文是MyBatis第十一讲,主要介绍MyBatis事务管理相关的使用和机制。

    2024年02月16日
    浏览(28)
  • [JavaWeb]【十二】web后端开发-事务管理&AOP

    目录 一、事务管理 1.1 事务回顾 1.2 Spring事务管理 1.2.1 案例  1.2.1.1 EmpMapper新增deleteByDeptId方法  1.2.1.2 DeptServiceImpl   1.2.1.3 启动服务-测试  1.2.2 模拟异常 1.2.3  分析问题  1.2.4 Spring事务管理(一般用在类似多次delete)  1.2.4.1 开启事务开关application.yml 1.2.4.2  DeptServiceImpl 

    2024年02月11日
    浏览(23)
  • Spring 事务管理方案和事务管理器及事务控制的API

    目录 一、事务管理方案 1. 修改业务层代码 2. 测试 二、事务管理器 1. 简介 2. 在配置文件中引入约束 3. 进行事务配置 三、事务控制的API 1. PlatformTransactionManager接口 2. TransactionDefinition接口 3. TransactionStatus接口 往期专栏文章相关导读  1. Maven系列专栏文章 2. Mybatis系列专栏文

    2024年02月08日
    浏览(32)
  • spring事务管理详解和实例(事务传播机制、事务隔离级别)

    目录 1 理解spring事务 2 核心接口 2.1 事务管理器 2.1.1 JDBC事务 2.1.2 Hibernate事务 2.1.3 Java持久化API事务(JPA) 2.2 基本事务属性的定义 2.2.1 传播行为 2.2.2 隔离级别 2.2.3 只读 2.2.4 事务超时 2.2.5 回滚规则 2.3 事务状态 3 编程式事务 3.1 编程式和声明式事务的区别 3.2 如何实现编程式

    2024年02月06日
    浏览(33)
  • 【Spring】Spring的事务管理

    Spring的事务管理简化了传统的事务管理流程,并且在一定程度上减少了开发者的工作量。 1.1 事务管理的核心接口 在Spring的所有JAR包中包含一个名为Spring-tx-4.3.6.RELEASE的JAR包,该包就是Spring提供的用于事务管理的依赖包。在该JAR包的org.Springframework.transaction包中有3个接口文件:

    2024年02月03日
    浏览(86)
  • Spring之事务管理

    事务是数据库操作最基本单位,要么都成功,要么都失败。 原子性 一致性 隔离性 持久性。 Spring定义了7种传播行为: 传播属性 描述 REQUIRED 如果有事务在运行,当前的方法就在这个事务内运行,否则,就启动一个新的事务,并在自己的事务内运行 REQUIRED_NEW 当前的方法必须

    2024年02月13日
    浏览(59)
  • Spring 事务管理

    目录 1. 事务管理 1.1. Spring框架的事务支持模型的优势 1.1.1. 全局事务 1.1.2. 本地事务 1.1.3. Spring框架的一致化编程模型 1.2. 了解Spring框架的事务抽象(Transaction Abstraction) 1.2.1. Hibernate 事务设置 1.3. 用事务同步资源 1.3.1. 高级同步方式 1.3.2. 低级同步方式 1.3.3.TransactionAwareDataSo

    2024年02月13日
    浏览(35)
  • Spring的事务管理

    1、事务的回顾 【1】事务的定义 是数据库操作的最小工作单元,是作为单个逻辑工作单元执行的一系列操作,这些操作作为一个整体一起向系统提交,要么都执行、要么都不执行;事务是一组不可再分割的操作集合 【2】事务的ACID原则 事务具有4个基本特性:原子性、一致性

    2023年04月16日
    浏览(70)
  • 【掌握Spring事务管理】深入理解事务传播机制的秘密

    🎉🎉🎉 点进来你就是我的人了 博主主页: 🙈🙈🙈 戳一戳,欢迎大佬指点! 欢迎志同道合的朋友一起加油喔 🤺🤺🤺 目录 1.Spring 中事务的实现方式 1.1 Spring 编程式事务 (了解) 1.2 Spring 声明式事务 ( @Transactional ) 【异常情况一】(自动回滚成功) 【异常情况二】(自动回滚失效

    2024年02月10日
    浏览(34)
  • 【Spring教程21】Spring框架实战:Spring事务简介、AOP事务管理、代码示例全面详解

    欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《AOP(面对切面编程)知识总结》 事务作用:在数据层保障一系列的数据库

    2024年02月04日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包