Java中Transactional在不同方法间的穿透性,rollbackFor参数含义

哈喽,大家好,我是木头左!
在Java开发中,经常会遇到需要在一个事务中执行多个操作的场景。为了确保这些操作的原子性,可以使用Spring框架提供的@Transactional注解来实现事务管理。然而,在实际开发过程中,可能会遇到一个问题:@Transactional注解在不同的方法之间是否具有穿透性?另外,rollbackFor参数又有什么含义呢?本文将针对这两个问题进行详细的探讨。

1. @Transactional注解在不同方法间的穿透性

来看一下@Transactional注解在不同方法间是否具有穿透性。答案是:具有穿透性。

当在一个类的方法上添加了@Transactional注解后,这个注解会对该类的所有方法生效。这意味着,在同一个事务中,如果一个方法调用了另一个被@Transactional注解修饰的方法,那么这两个方法都会在同一个事务中执行。这就是@Transactional注解在不同方法间的穿透性。

下面是一个简单的示例:

@Service
public class UserService {@Autowiredprivate UserDao userDao;@Transactional(rollbackFor = Exception.class)public void methodA() throws Exception {userDao.insert(new User("张三"));int i = 1 / 0; // 故意抛出异常,触发事务回滚userDao.update(new User("李四"));}@Transactional(rollbackFor = Exception.class)public void methodB() throws Exception {userDao.insert(new User("王五"));userDao.update(new User("赵六"));}
}

在这个示例中,在UserService类的两个方法上都添加了@Transactional注解。当调用methodA()时,它会先执行插入操作,然后抛出异常,最后执行更新操作。由于这两个操作都在同一个事务中,所以当异常发生时,整个事务会被回滚,即插入和更新操作都不会生效。同样,当调用methodB()时,它也会在同一个事务中执行插入和更新操作。

2. rollbackFor参数含义

接下来,来看一下rollbackFor参数的含义。在Spring的事务管理中,rollbackFor参数用于指定哪些异常会导致事务回滚。默认情况下,只有RuntimeException及其子类的异常才会触发事务回滚。但是,通过设置rollbackFor参数,可以自定义需要回滚的异常类型。

下面是一个简单的示例:

@Service
public class UserService {@Autowiredprivate UserDao userDao;@Transactional(rollbackFor = Exception.class) // 设置rollbackFor参数为Exception.class,表示所有类型的异常都会触发事务回滚public void methodA() throws Exception {userDao.insert(new User("张三"));int i = 1 / 0; // 故意抛出异常,触发事务回滚userDao.update(new User("李四"));}
}

在这个示例中,将rollbackFor参数设置为Exception.class。这意味着,无论抛出何种类型的异常,只要在同一个事务中,事务都会被回滚。需要注意的是,这样做可能会导致不必要的性能开销,因为很多非业务异常(如I/O异常、数据库连接异常等)也会导致事务回滚。因此,在实际开发中,应该根据实际情况合理设置rollbackFor参数。

3. 总结

通过对@Transactional注解在不同方法间的穿透性和rollbackFor参数含义的探讨,可以得出以下结论:

  • @Transactional注解在不同方法间具有穿透性,即同一个事务中的方法都会受到该注解的影响;
  • rollbackFor参数用于指定哪些异常会导致事务回滚,可以自定义需要回滚的异常类型;
  • 在实际开发中,应该根据实际情况合理设置rollbackFor参数,避免不必要的性能开销。

我是木头左,感谢各位童鞋的点赞、收藏,我们下期更精彩!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/348570.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Intel CVPR 2024】通过图像扩散模型生成高质量360度场景,只需要一个语言模型

在当前人工智能取得突破性进展的时代,从单一输入图像生成全景场景仍是一项关键挑战。大多数现有方法都使用基于扩散的迭代或同步多视角内绘。然而,由于缺乏全局场景布局先验,导致输出结果存在重复对象(如卧室中的多张床&#xff0…

JVM性能优化案例:减少对象频繁创建

JVM性能优化案例:减少对象频繁创建 案例背景 某金融应用系统在处理大量并发交易时,响应时间过长,并且有时出现内存溢出(OutOfMemoryError)的问题。经过分析,发现问题主要出在频繁的对象创建和较差的内存管…

如何降低pcdn的延迟?

要降低P2P CDN的延迟,可以采取以下操作: 一.优化网络连接: 1、使用有线网络连接替代无线连接,因为有线连接通常提供更稳定的数据传输。 2、升级家庭或企业路由器,选择性能更好的路由器以提高网络传输速度…

【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试)

【后端开发】服务开发场景之高可用(冗余设计,服务限流,降级熔断,超时重试,性能测试) 文章目录 序:如何设计一个高可用的系统?可用性的判断指标是什么?哪些情况会导致系统…

SJ902安全网贯穿测试仪

产品内容 安全网耐贯穿试验机是根据GB 5725-2009 《安全网》用于检测安全网的耐贯穿性能。 技术指标 1、贯穿物:直径50mm,质量5kg的2圆棒 2、贯穿试验架与水平面夹角:30 3、贯穿试验高度:距离被贯穿网中心1米 4、电动提升、…

怎么防止源代码泄露?9种方法教会你!

怎么防止源代码泄露?首先要了解员工可以通过哪些方式将源代码传输出去! 物理方法: — 网线直连,即把网线从墙上插头拔下来,然后和一个非受控电脑直连; — winPE启动,通过光盘或U盘的winPE启动,甚…

操作系统——信号

将信号分为以上四个阶段 1.信号注册:是针对信号处理方式的规定,进程收到信号时有三种处理方式:默认动作,忽略,自定义动作。如果不是自定义动作,这一步可以忽略。这个步骤要使用到signal/sigaction接口 2.…

最新有钱还系统源码 人人还众筹还钱模式还贷系统源码

本文来自:最新有钱还系统源码 人人还众筹还钱模式还贷系统源码 - 源码1688 应用介绍 简介: 最新有钱还系统源码 | 人人还众筹还钱模式还贷系统源码 转载未测试 盈利模式: 1.系统里直推400 2.间推得200 3.升级是隔代匹配200 4.漏单直接…

借助Historian Connector + TDengine,打造工业创新底座

在工业自动化的领域中,数据的采集、存储和分析是实现高效决策和操作的基石。AVEVA Historian (原 Wonderware Historian) 作为领先的工业实时数据库,专注于收集和存储高保真度的历史工艺数据。与此同时,TDengine 作为一款专为时序数据打造的高…

SpringBoot的Mybatis-plus实战之基础知识

文章目录 MybatisPlus 介绍一、MyBatisPlus 集成步骤第一步、引入依赖第二步、定义mapper 二、注解TableNameTableldTableField 三、配置文件四、加解密实现步骤 在SpringBoot项目中使用Mybatis-plus,记录下来,方便备查。 MybatisPlus 介绍 为简化开发而…

项目文章 | Cell ReportsChIP-seq和RNA-seq联合鉴定伯克霍尔德氏菌毒性的重要调节因子

发表单位:中山大学深圳校区制药科学学院 发表日期:2024年5月14日 研究期刊:Cell Reports(IF: 8.8) 研究材料:伯克霍尔德氏菌 主要技术:ChIP-seq,EMSA,微尺度热泳分析…

Linux环境---在线安装MYSQL数据库

Linux环境—在线安装MYSQL数据库 一、使用步骤 1.安装环境 Mysql 驱动 8.0 需要 jdk1.8 才行。 JDK版本:1.8 参考文档 MYSQL版本:8.0.2 下载链接: https://pan.baidu.com/s/1MwXIilSL6EY3OuS7WtpySA?pwdg263 操作系统:CentOS 1.1 建立存…

LabVIEW Actor架构特点与适用范围

LabVIEW的Actor架构提供了一种基于消息传递的并行任务管理方式,适合复杂系统的模块化设计。其特点包括高可扩展性、灵活的消息传递和并行处理能力。维护和修改要求较高,适合有一定经验的开发人员。对于中小型项目,可考虑选择更简单的状态机架…

如何在浏览器书签栏设置2个书签实现一键到达网页顶部和底部

本次设置浏览器为:Chrome浏览器(其他浏览器可自行测试) 1,随便收藏一个网页到浏览器书签栏 2,右键这个书签 3,修改 4,修改名称 5,修改网址: javascript:(function(…

Vivado时序报告之Datasheet详解

目录 一、前言 二、Datasheet配置选项说明 2.1 Options 2.2 Groups 2.3 Timer Settings 2.4 Common Options 三、Datasheet报告 3.1 General Information 3.2 Input Ports Setup/Hold 3.3 Output Ports Clock-to-out 3.4 Setup between Clocks 3.5 Combinational…

Linux2(文件类型分类 基本命令2 重定向)

目录 一、文件类型分类 二、基本命令2 1. find 帮助查询 2. stat 查看文件的信息 3. wc 统计文本 4. 查看文本内容 4.1 cat 4.2 more 4.3 less 4.4 head 4.5 tail 5. cal 显示日历 6. date 显示时间 7. du 文件大小 8. ln 链接 软链接 硬链接 区别 9. histo…

k8s metrics-server服务监控pod 的 cpu、内存

项目场景: 需要开启指标服务,依据pod 的 cpu、内存使用率进行自动的扩容或缩容 pod 的数量 解决方案: 下载 metrics-server 组件配置文件: wget https://github.com/kubernetes-sigs/metrics-server/releases/latest/download/…

C++和C语言到底有什么区别?

引言:C和C语言是两种非常常见的编程语言,由于其广泛的应用和灵活性,它们在计算机科学领域内受到了广泛的关注。虽然C是从C语言发展而来的,但是这两种语言在许多方面都有所不同。本文将对C和C语言进行比较和分析,以便更…

01 Pytorch 基础

paddle不需要放数据到gpu! 区别:1.batch_norlization 不同 2. 1.数据处理 1.取一个数据,以及计算大小 (剩下的工作,取batch,pytorch会自动做好了) 2.模型相关 如何得到结果 3.模型训练/模型…

C++类与对象(拷贝与类的内存管理)

感谢大佬的光临各位,希望和大家一起进步,望得到你的三连,互三支持,一起进步 个人主页:LaNzikinh-CSDN博客 文章目录 前言一.对象的动态建立和释放二.多个对象的构造和析构三.深拷贝与浅拷贝四.C类的内存管理总结 前言 …