Spring---事务

事务

学习了MySQL的朋友应该大致了解事务的含义。所谓事务就是一系列操作,要么都执行,要么都不执行。在spring中事务有两种形式:声明式事务和编程式事务。一般使用声明式事务,用的比较多的就是注解@Transactional。如下图所示:
在这里插入图片描述
与编程式事务不同的是,声明式事务将事务管理代码从业务方法中抽离了出来,以声明式的方式来实现事务管理。可以理解为对于某个方法的补充或者增强,那么这个时候就得用到Spring中另一个知识点—AOP。
首先来看看@Transactional源码:

@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Transactional {
    @AliasFor("transactionManager")
    String value() default "";

    @AliasFor("value")
    String transactionManager() default "";
	//事务的传播行为
    Propagation propagation() default Propagation.REQUIRED;
	//隔离级别
    Isolation isolation() default Isolation.DEFAULT;
	//超时时间
    int timeout() default -1;
	//是否只读
    boolean readOnly() default false;
	//定义异常类,且必须是Throwable的子类,当方法抛出这些异常及其子类异常的时候,spring会让事务回滚
    Class<? extends Throwable>[] rollbackFor() default {};

    String[] rollbackForClassName() default {};
	//定义不回滚的异常类
    Class<? extends Throwable>[] noRollbackFor() default {};

    String[] noRollbackForClassName() default {};
}

总结上述代码就是:指定了事务管理器、隔离级别、事务的传播行为、哪些异常事务(不)回滚、事务超时时间。
对于事务隔离级别,此处分为以下五种:
(1)ISOLATION_DEFAULT:数据库默认隔离级别,现在基本都是REPEATABLE_READ可重复读
(2)ISOLATION_READ_UNCOMMITTED:读未提交
(3)ISOLATION_READ_COMMITTED:读已提交
(4)ISOLATION_REPEATABLE_READ:可重复读
(5)ISOLATION_SERIALIZABLE:串行化
对于事务传播行为,分为以下七种:
(1)PROPAGATION_REQUIRED:默认传播行为,如果A方法和B方法都有此注解,在此模式下,某个类中A方法内部调用了另一个类中B方法,两个事务合并为一个事务。
(2)PROPAGATION_REQUIRES_NEW:延续上面的例子,若当前A方法存在事务,且内部调用了B方法,B方法创建自己的事务,且与A方法互相独立,互不干扰。
(3)PROPAGATION_NESTED:延续上面的例子,当A方法中调用B方法,且B方法是此模式,B出现异常,A不会回滚,而B发生回滚。
(4)PROPAGATION_SUPPORTS:延续上面的例子,当A方法有事务,B方法就以事务运行,若A方法没有事务,B方法就以无事务运行。
(5)PROPAGATION_NOT_SUPPORTED:延续上面的例子,方法A调用方法B,B方法会将A的事务挂起,以无事务运行。
(6)PROPAGATION_MANDATORY:延续上面的例子,A方法调用B方法,若A方法没有事务则报出异常。
(7)PROPAGATION_NEVER:以无事务运行,若存在事务,发生异常
注:
(1)@Transactional注解加到类上面,也可以加到方法上面。
(2)如果这个注解加到类上面,这个类里面所有的方法都添加事务。
(3)如果这个注解加到方法上面,这个方法添加了事务。

事务的回滚策略
在这里插入图片描述
用来指定能够触发事务回滚的异常类型,可以指定多个异常类型。默认情况下,事务只在出现运行时异常(Runtime Exception)时回滚,以及 Error,出现检查异常(checked exception)需要主动捕获处理或者向上抛出)时不回滚。也可以指定noRollbackFor,来设定不回滚的异常类型。

事务常见的失效场景
(1)底层数据库引擎不支持事务
(2)作用在非public方法之上
(3)类内部调用类内部@Transactional标注的方法
(4)在整个事务方法中使用 try-catch,导致异常无法抛出
(5)rollbackFor 属性设置错误,其不回滚检查异常(例如 IOException)

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深入理解指针3

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起继续深入学习指针&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#xff01;&#xff01; 话不多说&am…

Unity环境配置并解决visual studio 不能智能代码提示Unity代码问题(一)

1、请先安装好unity和Visual Studio 2019 2、Visual Studio需要安装如图&#xff08;2019才会有那个移动的可以勾选&#xff09; 3、Unity配置 file->build setting windows->package manager 安装如下图 edit->preferences 3、创建c#脚本 如果还是没能智能提…

计算机基础知识65

cookie和session的使用 # 概念&#xff1a;cookie 是客户端浏览器上的键值对 # 目的&#xff1a;为了做会话保持 # 来源&#xff1a;服务端写入的&#xff0c;服务端再返回的响应头中写入&#xff0c;浏览器会自动取出来 存起来是以key value 形式&#xff0c;有过期时间、path…

嵌入式Linux开发——解决uboot无法使用nfs服务从ubuntu中下载文件(TTT、cannot mount等错误)

前言&#xff1a; 最近在学习正点原子嵌入式Linux开发板uboot的移植实验&#xff0c;移植完之后想测试网络部分的驱动能否工作正常。最后经过测试发现tftp可以正常下载&#xff0c;nfs却一直报错无法下载文件&#xff0c;最后也是折磨了两天才解决了问题&#xff0c;特写下此博…

基于ssm vue的风景文化管理平台源码和论文

摘 要 随着信息化时代的到来&#xff0c;管理系统都趋向于智能化、系统化&#xff0c;基于vue的木里风景文化管理平台也不例外&#xff0c;但目前国内的市场仍都使用人工管理&#xff0c;市场规模越来越大&#xff0c;同时信息量也越来越庞大&#xff0c;人工管理显然已无法应对…

sort by modulus of a complex number

描述 复数E包含实部x和虚部y, Exyi;E的模为: 输入n(<1000)和n对(x,y); 按模数升序对复合体进行排序&#xff0c;如果模数相等&#xff0c;则按输入顺序排序。 排序后输出n行of (x_i,y_i,mod_i)&#xff0c;保留2个十进制小数。 输入 输入n和n对(x,y); 输出 输出排序后的n行(…

智能优化算法应用:基于金鹰算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于金鹰算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于金鹰算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.金鹰算法4.实验参数设定5.算法结果6.参考文献7.MATLAB…

android开发市场被抢占,鸿蒙能入行吗?

根据最新的数据&#xff0c;华为Mate60系列在上市第二周就成功占据了国内手机市场的17%份额&#xff0c;排名第二。而机构预测&#xff0c;华为手机在第37周有望超过20%的市场份额&#xff0c;成为国内手机市场的冠军。 一开始&#xff0c;人们对HarmonyOSNEXT持保留态度&…

SpringBoot集成mail发送邮件

前言 发送邮件功能&#xff0c;借鉴 刚果商城&#xff0c;根据文档及项目代码实现。整理总结便有了此文&#xff0c;文章有不对的点&#xff0c;请联系博主指出&#xff0c;请多多点赞收藏&#xff0c;您的支持是我最大的动力~ 发送邮件功能主要借助 mail、freemarker以及rocke…

深入浅出之中央空调体系架构及楼宇自控系统

一、关于建筑节能 1、建筑能耗 在中国&#xff0c;建筑能耗占社会总能耗45.5%。来源&#xff1a;《中国建筑能耗研究报告&#xff08;2022&#xff09;》 2、空调、采暖、照明占比最高 建筑节能是指在保证、提高建筑舒适性和生活质量的条件下&#xff0c;在建筑物使用的全过…

深度学习在计算机视觉中的应用

深度学习在计算机视觉中的应用 摘要&#xff1a;本文介绍了深度学习在计算机视觉领域的应用&#xff0c;包括目标检测、图像分类、人脸识别等。通过分析深度学习在计算机视觉中的实际应用案例&#xff0c;阐述了深度学习在计算机视觉中的优势和未来发展趋势。 一、引言 计算…

解决 vite 中 import.meta.globEager is not function 的问题

本人正在重构两年前搭建到一半的博客网站&#xff0c;相关依赖都很陈旧&#xff0c;用到了 npm-check-updates 检测项目可升级依赖&#xff1a; 升级完成后解决完依赖发现控制台报错 import.meta.globEager is not function解决方案&#xff1a; vite版本降至4.3.0 亲测有效&…

酷开科技 | 酷开系统,让家庭娱乐方式焕然一新!

在这个快节奏的社会&#xff0c;家庭娱乐已成为我们日常生活中不可或缺的一部分&#xff0c;为了给家庭带来更多欢笑与感动&#xff0c;酷开科技发力研发出拥有丰富内容和技术的智能电视操作系统——酷开系统&#xff0c;它集合了电影、电视剧、综艺、游戏、音乐等海量内容&…

【微服务 SpringCloudAlibaba】实用篇 · Feign服务远程调用

微服务&#xff08;7&#xff09; 文章目录 微服务&#xff08;7&#xff09;1. Feign替代RestTemplate1&#xff09;引入依赖2&#xff09;添加注解3&#xff09;编写Feign的客户端4&#xff09;测试5&#xff09;总结 2.自定义配置2.1 配置文件方式2.2 Java代码方式 3. Feign…

绘制纹理C++

用数学和C绘制一些纹理 sin(x * x y * y) int main() {int width 400; // 宽度int height 400; // 高度Mat texture Mat::zeros(height, width, CV_8UC1);for (int y 0; y < height; y) {for (int x 0; x < width; x) {int value static_cast<int>(255 * …

分享86个选项卡TABJS特效,总有一款适合您

分享86个选项卡TABJS特效&#xff0c;总有一款适合您 86个选项卡TABJS特效下载链接&#xff1a;https://pan.baidu.com/s/1NBtPP2tT5YQqi6c744tCqg?pwd6666 提取码&#xff1a;6666 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0…

C++进阶篇7---异常

目录 一、异常的介绍 二、异常的使用 1.异常的抛出和捕获 2.异常的重新抛出 3.异常安全 4.异常规范 三、自定义异常体系 四、C标准库的异常体系 一、异常的介绍 异常是一种处理错误的方式&#xff0c;当一个函数发现自己无法处理的错误时就可以抛出异常&#xff0c;让…

初识Linux——基本指令(详解)1

呀哈喽&#xff0c;我是结衣。 在学习数据结构的同时&#xff0c;也不要忘了Linux的学习啊。今天我们开始Linux的教学&#xff0c;在学习之前我们肯定要会搭建Linux的学习环境&#xff0c;在我们的以前的博客里是有讲解的&#xff0c;所以所以这里我们就不在多说&#xff0c;我…

openEuler 22.03 升级openssh9.5

yum安装编译依赖的组件 yum install -y rpm-build gcc gcc-c glibc glibc-devel openssl-devel openssl pcre-devel zlib zlib-devel make wget krb5-devel pam-devel libX11-devel libXt-devel initscripts libXt-devel gtk2-devel lrzsz建立编译目录 mkdir -pv /root/rpm…

【数据结构与算法篇】一文详解数据结构之二叉树

树的介绍及二叉树的C实现 一 . 树的概念二 . 相关术语三 . 树的表示四 . 什么是二叉树1> 二叉树的特性2> 特殊的二叉树3> 二叉树的性质 五 . 二叉树的存储结构1> 二叉树的顺序存储2> 二叉树的链式存储 六 . 堆1> 什么是堆2> 用堆存储数据3> 堆的Cpp代码…