Spring中声明式事务

news2024/11/25 21:00:25

声明式事务:基于Spring AOP,通过注解或XML配置实现,有助于用户将操作与事务规则进行解耦。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

本文主要对基于注解的方式叙述。

事务注解:@Transactional,加此注解看作一个事务,要么都成功要么都失败。

纯注解模式下实现事务只需要把注解驱动的注解形式@EnableTransactionManagement 加在Spring的配置类上就可以了。

@Transactional注解用于两种场景:

  • 标于类上:表示当前类以及其下无限级子类中所有pubilc方法将被spring自动加上事务。
    一般不推荐使用,事务控制的粒度太大。

  • 标于方法上:仅对该方法。
    当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。

  • 标于接口上:表示接口的实现类中所有public方法都被spring自动加上事务
    不推荐这种使用方法,因为一旦标注在Interface上并且配置了Spring AOP 使用CGLib动态代理,将会导致@Transactional注解失效。

@Transactional 只能被应用到public方法上,对于其它非public的方法,如果标记了@Transactional也不会报错,但方法没有事务功能。

Spring事务失效场景

最常见的:既添加了@Transactional 注解,方法里却又添加了catch语句对业务进行异常捕获,都把异常“吃”掉了,Spring自然不知道这里有错,更不会主动去回滚数据。

 

参数

参数描述
value指定事务管理器的bean名称,如果容器中有多事务管理器PlatformTransactionManager,那么得告诉spring,当前配置需要使用哪个事务管理器
transactionManager同value,value和transactionManager选配一个就行,也可以为空,如果为空,默认会从容器中按照类型查找一个事务管理器bean
propagation事务的传播属性
isolation事务的隔离级别,就是制定数据库的隔离级别,数据库隔离级别大家知道么?不知道的可以去补一下
timeout事务执行的超时时间(秒)。执行一个方法,有问题,可能最多只能等5秒, 5秒后,还没有执行完毕,就弹出一个超时异常。
readOnly是否是只读事务,比如某个方法中只有查询操作,可以指定事务是只读的,设置了这个参数,数据库可能会做一些性能优化,提升查询速度
rollbackFor定义零(0)个或更多异常类,这些异常类必须是Throwable的子类,当方法抛出这些异常及其子类异常的时候,spring会让事务回滚,如果不配做,那么默认会在 RuntimeException 或者 Error 情况下,事务才会回滚
rollbackForClassName同 rollbackFor,只是这个地方使用的是类名
noRollbackFor定义零(0)个或更多异常类,这些异常类必须是Throwable的子类,当方法抛出这些异常的时候,事务不会回滚
noRollbackForClassName同 noRollbackFor,只是这个地方使用的是类名

事务的回滚和不回滚

(1)rollbackFor:参数为class类型的数组,定义哪些异常时回滚;

(2)rollbackForClassName:参数为字符串类型的数组,定义哪些异常时回滚;

(3)noRollbackFor:参数为class类型的数组,定义哪些异常时不回滚;

(4)noRollbackForClassName:参数为字符串类型的数组,定义哪些异常时不回滚。

@Transactional 默认只能回滚RuntimeException和RuntimeException下面的子类抛出的异常,不能回滚Exception异常;如果需要支持回滚Exception异常,需要显示的指明。
如:@Transactional(rollbackFor = Exception.class);

rollbackFor 回滚(预提交) --------》 Exception可替换

  • Exception 表示:遇到错误就回滚;
  • ServiceException 表示:当ServiceException 失败时,才回滚
  • ...

显示的指定rollbackFor注解属性,即使rollbackFor有默认值,但阿里巴巴开发者规范中,还是要求开发者重新指定该参数,因为如果使用默认值,一旦程序抛出了非运行时的其他Exception,事务不会回滚,这会出现很大的bug;

在数据库中操作时:

将数据库变更当作一个事务,整个处理操作完成后,才进行数据库操作,只要里面有一个错误,就失败了。

尤其涉及到多个表的数据库操作时,一定要使用这个注解!!!

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端小练-产品宣传页面

文章目录 前言页面结构固定钉头部轮播JS特效 完整代码总结 前言 经过一个月的爆肝,花费了一个月(期间还花费了将近半个月的时间打比赛,还要备研)算是把数二高数的内容强化了一遍,接下来刷熟练度即可,可惜的…

VirtualBox Ubuntu无法安装增强功能以及无法复制粘贴踩坑记录

在VirtualBox安装增强功能想要和主机双向复制粘贴,中间查了很多资料,终于是弄好了。记录一下过程,可能对后来人也有帮助,我把我参考的几篇主要的博客都贴上来了,如果觉得我哪里讲得不清楚的,可以去对应的博…

前端生成图片验证码怎么做?

##题记:我们实现一个功能首先想一下我们需要做哪些工作,比如我们需要生成一个随机的图片验证码,我们需要一个就是点击事件获取验证码,通过接口我们去获取图片路径进行渲染就行,这里边还要牵扯一件事情就是获取一个随机…

uniapp开发小程序-实现中间凸起的 tabbar

一、效果展示: 二、代码实现: 1.首先在pages.json文件中进行tabbar的样式和列表配置,代码如下: {"pages": [ //pages数组中第一项表示应用启动页,参考:https://uniapp.dcloud.io/collocation/p…

Stable Diffusion AI绘画学习指南【本地环境搭建win+mac】

一、硬件配配置要求 系统:windows 10 / Mac os 硬盘:C 盘预留 15GB 以上,其他盘 50GB 以上,Stable Ddiffusion的很多大模型都是以 GB 起步。 显卡:4GB 以上,建议 8GB, 效率高,能玩大尺寸的图 CPU&…

Socks IP轮换:为什么是数据挖掘和Web爬取的最佳选择?

在数据挖掘和Web爬取的过程中,IP轮换是一个非常重要的概念。数据挖掘和Web爬取需要从多个网站或来源获取数据,而这些网站通常会对来自同一IP地址的请求进行限制或封锁。为了避免这些问题,数据挖掘和Web爬取过程中需要使用Socks IP轮换技术。在…

Redis秒杀:一人一单问题及初步解决

优惠券秒杀一人一单 前言一、需求以及之前存在的问题二、增加一人一单逻辑1.初步代码2.封装一人一单逻辑3.控制锁的粒度 三、事务控制问题四、总结 前言 跟随黑马虎哥学习redis: 这是我认为b站上最好的redis教程,各方面讲解透彻,知识点覆盖…

Mr. Cappuccino的第53杯咖啡——Mybatis源码分析

Mybatis源码分析 Mybatis源码分析入口1. 读取配置文件总结 2. 解析配置文件核心代码(一)核心代码(二)分析parse()方法分析build()方法 总结 3. 获取SqlSession总结 4. 获取mapper代理对象总结 5. 使用mapper代理对象执行Sql语句二…

基于SpringBoot+Vue的会员制医疗预约服务管理信息系统设计与实现(源码+LW+部署文档等)

博主介绍: 大家好,我是一名在Java圈混迹十余年的程序员,精通Java编程语言,同时也熟练掌握微信小程序、Python和Android等技术,能够为大家提供全方位的技术支持和交流。 我擅长在JavaWeb、SSH、SSM、SpringBoot等框架…

Android Studio log的快捷键和使用

输入logi,然后按下Tab键,会自动补全一条info级别的打印日志。输入logw,按下Tab键,会自动补全一条warn级别的打印日志,以此类推。 如下图所示:

C#项目发布

C#项目发布 vs code 打包iis 配置 vs code 打包 iis 配置

VMware Linux Centos 配置网络并设置为静态ip

在root用户下进行以下操作 1. 查看子网ip和网关 (1)进入虚拟网络编辑器 (2)进入NAT设置 (3)记录子网IP和子网掩码 2. 修改网络配置文件 (1)cd到网络配置文件路径下 [rootlo…

【视觉SLAM入门】5.1. 特征提取和匹配--FAST,ORB(关键点描述子),2D-2D对极几何,本质矩阵,单应矩阵,三角测量,三角化矛盾

"不言而善应" 0. 基础知识1. 特征提取和匹配1.1 FAST关键点1.2 ORB的关键点--改进FAST1.3 ORB的描述子--BRIEF1.4 总结 2. 对极几何,对极约束2.1 本质矩阵(对极约束)2.1.1 求解本质矩阵2.1.2 恢复相机运动 R , t R,t R,…

推荐几款小众且无广告的软件,你值得拥有

你是否喜欢一些小众且无广告的软件?如果是的话,我这边有一些给你推荐的。 护眼软件——EyeLoveU ​ EyeLoveU是一款免费的护眼软件,可以在你使用电脑一段时间后,提醒你该让眼睛休息。EyeLoveU是一种智能的眼睛保护程序&#xff…

python tkinker界面

import tkinter from PIL import Image, ImageTkdog tkinter.Tk() # 设置图片描绘的坐标,注意乘号是字母x dog.geometry(500x500200100) # 不允许修改大小 dog.resizable(False, False) # 不显示标题栏 dog.overrideredirect(True) # 设置白色透明色,这…

【玩转pandas系列】数据清洗(文末送书福利)

文章目录 一、重复值检测二、元素替换1️⃣ 元素替换replace2️⃣ 数据映射map 三、修改索引1️⃣ 修改索引名rename2️⃣ 设置索引和重置索引 四、数据处理1️⃣ apply与applymap2️⃣ transform 五、异常值处理六、抽样聚合函数1️⃣ 抽样2️⃣ 数学函数 七、分组聚合&#x…

DAY16_VUE基本用法详细版

目录 0 HBuilderX修改注释0 HBuilderX 修改.VUE中的注释颜色1 Vue入门1.1 什么是Vue1.2 Vue优点1.3 Vue案例1.3.1入门案例1.3.2 v-cloak属性1.3.3.1 v-text 指令1.3.3.2 v-html 指令1.3.3.3 v-pre 指令1.3.3.4 v-once 指令1.3.3.5 v-model 指令 1.3.4 MVVM思想 1.4 事件绑定1.4…

OpenLayers入门,OpenLayers如何加载WFS服务的要素资源数据

专栏目录: OpenLayers入门教程汇总目录 前言 本章讲解如何使用OpenLayers加载WFS服务的要素资源数据。 WFS规范介绍 WFS是基于地理要素级别的数据共享和数据操作,WFS规范定义了若干基于地理要素(Feature)级别的数据操作接口,并以 HTTP 作为分布式计算平台。通过 WFS服…

如何将工作可视化管理,工作流程管理

看板利用了对视觉内容的偏好,可以帮助团队理解和分析在工作中发生了什么,遇到了哪些问题和瓶颈,我们可以通过看板更好的可视化工作流程,可以在看板内自定义工作流程, 首先创建工作流任务看板 通过Leangoo领歌敏捷看板…

AD21 PCB设计的高级应用(七)盲埋孔的设置

(七)盲埋孔的设置 1.盲埋孔的设置2.Pad/Via模板的使用 1.盲埋孔的设置 随着目前便携式产品的设计朝着小型化和高密度的方向发展,PCB的设计难度也越来越大,对 PCB 的生产工艺提出了更高的要求。在目前大部分的便携式产品中 0.65mm间距以下 BGA封装均使用…