首页 > 其他分享 >Spring事务

Spring事务

时间:2024-09-25 21:24:44浏览次数:3  
标签:事务管理 事务 Spring Transactional propagation REQUIRES id

文章目录

1. Transactional注解

@Transactional作用:就是在当前这个方法执行开始之前来开启事务,方法执行完毕之后提交事务。如果在这个方法执行的过程当中出现了异常,就会进行事务的回滚操作。

@Transactional注解:我们一般会在业务层当中来控制事务,因为在业务层当中,一个业务功能可能会包含多个数据访问的操作。在业务层来控制事务,我们就可以将多个数据访问操作控制在一个事务范围内。

@Transactional注解书写位置:

  • 方法
    • 当前方法交给spring进行事务管理
    • 当前类中所有的方法都交由spring进行事务管理
  • 接口
    • 接口下所有的实现类当中所有的方法都交给spring 进行事务管理

业务方法delete上加上 @Transactional 来控制事务 。

@Slf4j
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Autowired
    private EmpMapper empMapper;

    
    @Override
    @Transactional  //当前方法添加了事务管理
    public void delete(Integer id){
        //根据部门id删除部门信息
        deptMapper.deleteById(id);
        
        //模拟:异常发生
        int i = 1/0;

        //删除部门下的所有员工信息
        empMapper.deleteByDeptId(id);   
    }
}

说明:可以在application.yml配置文件中开启事务管理日志,这样就可以在控制看到和事务相关的日志信息了

#spring事务管理日志
logging:
  level:
    org.springframework.jdbc.support.JdbcTransactionManager: debug

2.事务进阶

@Transactional注解当中的两个常见的属性:

  1. 异常回滚的属性:rollbackFor
  2. 事务传播行为:propagation
2.1 rollbackFor

假如我们想让所有的异常都回滚,需要来配置@Transactional注解当中的rollbackFor属性,通过rollbackFor这个属性可以指定出现何种异常类型回滚事务。

@Slf4j
@Service
public class DeptServiceImpl implements DeptService {
    @Autowired
    private DeptMapper deptMapper;

    @Autowired
    private EmpMapper empMapper;

    
    @Override
    @Transactional(rollbackFor=Exception.class)
    public void delete(Integer id){
        //根据部门id删除部门信息
        deptMapper.deleteById(id);
        
        //模拟:异常发生
        int num = id/0;

        //删除部门下的所有员工信息
        empMapper.deleteByDeptId(id);   
    }
}

结论:

  • 在Spring的事务管理中,默认只有运行时异常 RuntimeException才会回滚。
  • 如果还需要回滚指定类型的异常,可以通过rollbackFor属性来指定。
2.1 propagation

属性propagation,这个属性是用来配置事务的传播行为的。

什么是事务的传播行为呢?

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

对于这些事务传播行为,我们只需要关注以下两个就可以了:

  1. REQUIRED(默认值)
  2. REQUIRES_NEW

在DeptLogServiceImpl类中insert方法上,添加@Transactional(propagation = Propagation.REQUIRES_NEW)

Propagation.REQUIRES_NEW :不论是否有事务,都创建新事务 ,运行在一个独立的事务中。

@Service
public class DeptLogServiceImpl implements DeptLogService {

    @Autowired
    private DeptLogMapper deptLogMapper;

    @Transactional(propagation = Propagation.REQUIRES_NEW)//事务传播行为:不论是否有事务,都新建事务
    @Override
    public void insert(DeptLog deptLog) {
        deptLogMapper.insert(deptLog);
    }
}

DeptServiceImpl中的delete方法运行时,会开启一个事务。 当调用 deptLogService.insert(deptLog) 时,也会创建一个新的事务,那此时,当insert方法运行完毕之后,事务就已经提交了。 即使外部的事务出现异常,内部已经提交的事务,也不会回滚了,因为是两个独立的事务。

到此事务传播行为已演示完成,事务的传播行为我们只需要掌握两个:REQUIRED、REQUIRES_NEW。

  • REQUIRED :大部分情况下都是用该传播行为即可。

  • REQUIRES_NEW :当我们不希望事务之间相互影响时,可以使用该传播行为。比如:下订单前需要记录日志,不论订单保存成功与否,都需要保证日志记录能够记录成功。

标签:事务管理,事务,Spring,Transactional,propagation,REQUIRES,id
From: https://blog.csdn.net/songguojiebd/article/details/142483933

相关文章

  • 基于SpringBoot+Vue的毕业生实习与就业管理系统设计与实现毕设(文档+源码)
            大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的毕业生实习与就业管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕设JavaWeb SSMSpringBoot等等项目框架,源码丰富,欢迎咨询。 一、项目介绍       ......
  • 基于SpringBoot+Vue的毕业设计成绩管理系统设计与实现毕设(文档+源码)
            大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的毕业设计成绩管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕设JavaWeb SSMSpringBoot等等项目框架,源码丰富,欢迎咨询。 一、项目介绍        传......
  • Java毕业设计:基于Springboo律师事务所预约网站毕业设计源代码作品和开题报告怎么写
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • Java毕业设计:基于Springboot网球场地预约网站管理系统毕业设计源代码作品和开题报告怎
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • spring boot的发展历程
    SpringBoot的发展历程:2013年:SpringBoot项目开始研发,旨在简化Spring应用的初始搭建以及开发过程。2014年4月:发布SpringBoot1.0.0版本,引入了“约定大于配置”的理念,简化了Spring应用的配置和部署。2015年:发布SpringBoot1.2版本,引入了对servlet3.1、tomcat8、jetty9的支......
  • springboot+vue杂志销售系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和互联网应用的普及,传统杂志销售模式正面临着前所未有的挑战与机遇。传统纸质杂志的销售依赖于实体书店、报刊亭等渠道,不仅成本高、效率低,且难以精准触达目标读者群体。同时,数字化阅读趋势的兴起,使得读者对于杂......
  • springboot+vue优选社区电商平台【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网的飞速发展和智能手机的普及,电子商务已成为人们日常生活不可或缺的一部分。近年来,社区电商作为一种新兴的电商模式,凭借其贴近消费者、快速响应需求、降低物流成本等优势,迅速崛起并受到广泛关注。特别是在新冠疫情的影响下,社......
  • springboot+vue在线图书分享与交易平台【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和数字化阅读的普及,传统的图书借阅与交易模式正逐步向线上转移。在线图书分享与交易平台应运而生,旨在打破地域限制,促进图书资源的有效流通与共享。当前,虽然市场上已存在多个图书电商平台和数字图书馆,但专注于......
  • springboot+vue租房网站【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着城市化进程的加速,人口流动日益频繁,租房已成为许多城市居民解决居住需求的重要方式。然而,传统的租房模式往往面临着信息不对称、中介费用高昂、房源真实性难以验证等问题,给租房者带来了诸多不便。随着互联网技术的飞速发展,网络租房......
  • springboot+vue云E办系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着信息技术的飞速发展和企业规模的日益扩大,传统的办公模式已难以满足现代企业高效、便捷、协同的管理需求。云计算技术的兴起,为企业信息化建设提供了新的思路与解决方案。云E办系统应运而生,旨在通过云端技术重构企业办公流程,实现资......