当前位置: 首页 > article >正文

详解:事务注解 @Transactional

创作内容丰富的干货文章很费心力,感谢点过此文章的读者,点一个关注鼓励一下作者,激励他分享更多的精彩好文,谢谢大家!


@Transactional Spring Framework 中常用的注解之一,它可以被用于管理事务。通过使用这个注解,我们可以方便地管理事务,保证数据的一致性和完整性。

Spring 应用中,当我们需要对数据库进行操作时,通常需要使用事务来保证数据的一致性和完整性。

@Transactional 注解可以被用于类或方法上,用于指定事务的管理方式。当它被用于类上时,它表示该类中所有的方法都将被包含在同一个事务中。当它被用于方法上时,它表示该方法将被包含在一个新的事务中。

@Transactional 注解有多个属性,其中最常用的是 propagation isolation

  • propagation 属性用于指定事务的传播行为,它决定了当前方法执行时,如何处理已经存在的事务
  • isolation 属性用于指定事务的隔离级别,它决定了当前事务与其他事务之间的隔离程度。

除了 propagation isolation 属性外,@Transactional 还支持其他属性,如 readOnlytimeout

rollbackFornoRollbackFor 等,这些属性可以用于进一步细化事务的行为。

总之,@Transactional 注解是 Spring 应用中常用的事务管理注解。

@Tranasctional注解的使用注意事项

@Tranasctional注解是Spring 框架提供的声明式注解事务解决方案,在使用@Transactional注解时需要注意以下问题:

  1. @Transactional 注解只能用在public 方法上,如果用在protected或者private的方法上,不会报错,但是该注解不会生效。
  2. 默认情况下,@Transactional注解只能回滚非检查型异常,具体为RuntimeException及其子类和Error子类

非检查型异常(Unchecked Exception)指的是程序在编译时不会提示需要处理该异常,而

是在运行时才会出现异常。在 Java 中,非检查型异常指的是继承自 RuntimeException

的异常,例如 NullPointerExceptionArrayIndexOutOfBoundsException 等。这些异常通

常是由程序员的代码错误引起的,因此应该尽可能避免它们的发生,但是在代码中并不需要

显式地处理它们。

检查型异常(Checked Exception)是指在 Java 中,编译器会强制要求对可能会抛出这些异

常的代码进行异常处理,否则代码将无法通过编译。这些异常包括 IOException、 SQLException 等等,它们通常表示一些外部因素导致的异常情况,比如文件读写错误、数

据库连接失败等等。

在编写代码时应该尽量避免抛出非检查型异常,因为这些异常的发生通常意味着程序存在严

重的逻辑问题。

@Configuration
@EnableTransactionManagement
public class AppConfig {
@Bean
public DataSource dataSource () {
// 配置数据源
}
@Bean
public JdbcTemplate jdbcTemplate () {
return new JdbcTemplate ( dataSource ());
}
@Bean
public PlatformTransactionManager transactionManager () {
return new DataSourceTransactionManager ( dataSource ());
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
默认情况下, @Transactional 注解只能回滚 非检查型异常,为啥呢 ?
可以从 Spring 源码的 DefaultTransactionAttribute 类里找到判断方法 rollbackOn
3. 如果需要对检查型异常( Checked Exception )进行回滚,可以使用 rollbackFor 属性来定义回滚
的异常类型,使用 propagation 属性定义事务的传播行为。
下面是一个例子:
上面的例子中 : 指定了回滚 Exception 类的异常为 Exception 类型或者其子类型检查型异常( Checked
Exception ),另外,配置类事务的传播行为支持当前事务,当前如果没有事务,那么会创建一个事
务。
4. @Transactional 注解不能回滚被 try{}catch() 捕获的异常。
5. @Transactional 注解只能对在被 Spring 容器扫描到的类下的方法生效。
其实 Spring 事务的创建也是有一定的规则,对于一个方法里已经存在的事务, Spring 也提供了解决方案
去进一步处理存在事务,通过设置 @Tranasctional propagation 属性定义 Spring 事务的传播规则。
Spring 事务的传播规则
Spring 事务的传播规则是指在多个事务方法相互调用的情况下,事务应该如何进行传播和管理。
Spring 事务的传播行为一共有 7 种,定义在 spring-tx 模块的 Propagation 枚举类里,对应的常量值定义
TransactionDefinition 接口里 , 值为 int 类型的 0-6
@Override
public boolean rollbackOn ( Throwable ex ) {
return ( ex instanceof RuntimeException || ex instanceof Error );
}
1
2
3
4
@Transactional ( rollbackFor = Exception . class , propagation =
Propagation . REQUIRED )
1 PROPAGATION_REQUIRED
支持当前事务,如果当前没有事务,则创建一个事务,这
是最常见的选择。
PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,就以非事务来执行
PROPAGATION_MANDATORY
支持当前事务,如果没有当前事务,就抛出异常。
PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NOT_SUPPORTED
以非事务执行操作,如果当前存在事务,则当前事务挂
起。
PROPAGATION_NEVER
以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有
事务,则进行与 PROPAGATION_REQUIRED 类似的操作。
稍后一点,结合源码介绍。

相关文章:

详解:事务注解 @Transactional

创作内容丰富的干货文章很费心力,感谢点过此文章的读者,点一个关注鼓励一下作者,激励他分享更多的精彩好文,谢谢大家! Transactional 是 Spring Framework 中常用的注解之一,它可以被用于管理事务。通过使用…...

场内、场外期权怎么开户?期权佣金是多少?

期权交易需要一定的知识和经验,以有效管理风险和制定策略。 场内期权开户(以50ETF为例) 场内期权开户的各种方式大差不差,咱们就先以50ETF期权为例子看下。 场内期权开户条件包括: 首先是资金的要求,50万…...

Linux:进程概念

目录 1 冯诺依曼体系 2 操作系统(Operator System) 3 如何理解管理 3.1计算机管理硬件 3.2 管理逻辑图 3.3 怎样管理 4 什么是进程? 5 查看进程 5.1 ps ajx显示所有进程信息 5.2 /proc(内存文件系统) 5.2.1 ls /proc/PID 5.2.2 ls /proc/PID -al ​ 5…...

Rabbit MQ 高频面试题【刷题系列】

文章目录 一、公司生产环境用的什么消息中间件?二、Kafka、ActiveMQ、RabbitMQ、RocketMQ有什么优缺点?三、解耦、异步、削峰是什么?四、消息队列有什么缺点?五、RabbitMQ一般用在什么场景?六、简单说RabbitMQ有哪些角…...

破解密码防线:渗透测试中的密码攻击手法汇总

密码是网络安全中的一道重要防线,然而,若密码策略不严密,往往会为攻击者提供可乘之机。本文将简要介绍渗透测试中关于密码的几种常见攻击思路和手法。 1. 确认使用默认及常见的账号密码 在渗透测试的初期,攻击者通常会尝试使用系…...

大模型在白血病诊疗全流程风险预测与方案制定中的应用研究

目录 一、绪论 1.1 研究背景与意义 1.2 国内外研究现状 1.3 研究目的与内容 二、大模型技术与白血病相关知识 2.1 大模型技术原理与特点 2.2 白血病的病理生理与诊疗现状 三、术前风险预测与手术方案制定 3.1 术前数据收集与预处理 3.2 大模型预测术前风险 3.3 根据…...

5-2JVM内存的各种应用

一、堆区(Heap)——对象实例的存储池 实际应用场景: ​对象实例化:所有通过 new 关键字创建的对象实例均存储在堆中。例如: java Person person new Person(“张三”); // person对象实例分配在堆区1,4,6 ​大对象直…...

【NLP 28、一文速通NLP文本分类任务 —— 深度学习】

目录 一、深度学习 — pipeline 流水线 1.配置文件 config.py Ⅰ、路径相关 Ⅱ、模型相关 Ⅲ、训练相关 2.数据加载 loader.py Ⅰ、类初始化 Ⅱ、加载数据并预处理 Ⅲ、文本编码 Ⅳ、对输入序列截断或填充 Ⅴ、返回数据长度 Ⅵ、返回对应索引位置元素 Ⅶ、加载词表 Ⅷ、封装数据…...

nvidia驱动更新,centos下安装openwebui+ollama(非docker)

查看centos内核版本 uname -a cat /etc/redhat-release下载对应的程序(这个是linux64位版本通用的) https://cn.download.nvidia.cn/tesla/550.144.03/NVIDIA-Linux-x86_64-550.144.03.run cudnn想办法自己下一下,我这里是12.x和11.x通用的…...

UnrealEngine UE5 可视化 从地球观察火星 金星 土星 运动轨迹

视频参考:https://www.bilibili.com/video/BV1KpXSYdEdo/ 从地球观察土星的运动轨迹 从地球观察火星 轨迹 从地球观察金星的运动轨迹...

蓝桥杯 五子棋对弈

五子棋对弈 问题描述 “在五子棋的对弈中,友谊的小船说翻就翻?” 不!对小蓝和小桥来说,五子棋不仅是棋盘上的较量,更是心与心之间的沟通。这两位挚友秉承着"友谊第一,比赛第二"的宗旨&#xff…...

springmvc热点面试题开胃菜

1. Spring MVC的核心组件有哪些?它们的作用是什么? 答案: Spring MVC的核心组件包括以下部分,每个组件都有其特定的作用: DispatcherServlet: 前端控制器,是Spring MVC的核心。它负责接收所有H…...

关于深度学习的一份介绍

在这篇文章中,我将介绍有关深度学习的东西,主要是它与神经网络的关系、目前主要的网络有哪些,以及加深神经网络的意义等。 一、联系 在之前的文章中,我曾介绍过神经网络,而所谓的神经网络其实就是深度学习的一种架构…...

JavaScript系列02-函数深入理解

本文介绍了JavaScript函数相关知识,包括 函数声明与函数表达式 - 解释两者的区别,提升行为,以及使用场景箭头函数特性 - 讲解语法、词法this、不能作为构造函数等特点this绑定机制 - 详细讲解四种绑定规则:默认绑定、隐式绑定、显…...

Netty是怎么实现Java NIO多路复用的?(源码)

目录 NIO多路复用实现事件循环是什么?核心源码(1)调用 NioEventLoopGroup 默认构造器(2)指定 SelectorProvider(3)创建 Selector(4)创建单线程和队列(5&#…...

SourceTree配置SSH步骤详解

1. 生成SSH密钥对 如果尚未生成SSH密钥,需先创建: Windows/macOS/Linux通用方法 打开终端(或Git Bash)。 输入以下命令(替换为你的邮箱): bash 复制 ssh-keygen -t ed25519 -C "your_em…...

Rocky Linux 8.5 6G内存 静默模式(没图形界面)安装Oracle 19C

Oracle19c 下载地址 Database Software Downloads | Oraclehttps://www.oracle.com/database/technologies/oracle-database-software-downloads.html#db_ee 目录 一、准备服务器 1、服务器可以克隆、自己装 2、修改主机名 3、重启 4、关闭selinux 5、关闭防火墙 5.1、…...

免费轻巧多功能 PDF 处理工具:转换、压缩、提取一应俱全

软件技术 今天要给大家分享一款超实用的 PDF 处理工具,它免费又轻巧,如同随时待命的得力小帮手,功能之强大超乎想象,真的值得大家收藏。 这款工具是绿色版软件,解压后开启,满满的 PDF 处理功能便映入眼帘…...

基于ssm的校园跑腿管理系统+vue

作者主页:舒克日记 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 系统共有管理员、用户两个角色 管理员主要的功能用户信息管理、任务信息管理、任务类型管理、接单信息管理、公告信息管理、投诉信息管理、公告类型管…...

java数据结构_Map和Set_9.1

1. 搜索树 1.1 概念 二叉搜索树又称二叉排序树,它或者是一棵空树,或者是具有以下性质的二叉树: 若它的左子树不为空,则左子树上所有的结点都小于根结点的值若它的右子树不为空,则右子树上所有的结点都大于根结点的值…...

横向移动靶场-Tr0ll: 3

Tr0ll: 3来自 <Tr0ll: 3 ~ VulnHub> 1&#xff0c;将两台虚拟机网络连接都改为NAT模式 2&#xff0c;攻击机上做namp局域网扫描发现靶机 nmap -sn 192.168.23.0/24 那么攻击机IP为192.168.23.182&#xff0c;靶场IP192.168.23.187 3&#xff0c;对靶机进行端口服务探测 …...

请解释 Node.js 中的网络模块(http、https),如何创建 HTTP服务器?

1. Node.js 中的网络模块&#xff08;http 和 https&#xff09; 原理与作用&#xff1a; Node.js 的 http 和 https 模块是内置的核心模块&#xff0c;用于创建 HTTP 和 HTTPS 服务器。 http 模块基于 Node.js 的事件驱动架构&#xff0c;利用 libuv 和 HTTP parser 库高效处…...

【WPF命令绑定之--没有Command属性的控件如何进行命令绑定?】

前言 C#WPF之命令绑定 内容 有些控件不支持直接绑定命令&#xff0c;可以调用其他依赖实现命令的绑定。 依赖&#xff1a;Microsoft.Xaml.Behaviors.Wpf 使用如下代码可以实现事件的命令绑定&#xff0c;及传递参数&#xff1a; 1、引用&#xff1a;xmlns:behavior“http://sch…...

记20忘10之六:line

记20忘10之六&#xff1a;line 胖子定律&#xff1a;每天坚持多咬两口&#xff0c;相信将来自己就是个胖子 今天&#xff0c;我们继续来记几个单词吧&#xff0c; line n.线 moral bottom line道德底线 派生、同源或相关&#xff1a; linear a.线的&#xff0c;直线的lineamen…...

【愚公系列】《Python网络爬虫从入门到精通》036-DataFrame日期数据处理

标题详情作者简介愚公搬代码头衔华为云特约编辑,华为云云享专家,华为开发者专家,华为产品云测专家,CSDN博客专家,CSDN商业化专家,阿里云专家博主,阿里云签约作者,腾讯云优秀博主,腾讯云内容共创官,掘金优秀博主,亚马逊技领云博主,51CTO博客专家等。近期荣誉2022年度…...

【系统稳定性】1.11 QVM稳定性问题分析(一)

目录 写在前面 一,qvm进程异常 1.1 进程崩溃(Coredump) 1.2 进程卡死 1.3 进程重启 二,qvm进程异常分析过程 写在前面 在QVM(Quantum Virtual Machine)作为HOST QNX的Guest,同样会遇到重启、Watchdog(看门狗)等稳定性问题。 这里我们把qvm的异常归类为两类问题…...

使用ChatGPT-Deep Reaserch两步给出文献综述!

文献综述是学术论文写作中不可或缺的一部分&#xff0c;它不仅是对已有研究的梳理和总结&#xff0c;更是为后续研究奠定理论基础的关键步骤。通过文献综述研究者能够全面了解当前研究领域的现状、主要观点和研究方法&#xff0c;从而找到自己研究的切入点和创新点。这一过程需…...

从0开始的操作系统手搓教程14——进一步完成中断子系统

目录 所以&#xff0c;如何查看我们的IDT呢 改进我们的中断处理hook 对8253编程&#xff0c;提升系统的频率 导论 控制字说明 说一下每个方式——概论 说一说计数器如何进行计时 方式0 方式1 方式2 方式3 方式4 方式5 回到问题&#xff0c;我们如何设置单次触发冲…...

小米火龙CPU和其他几代温度太高的CPU是由谁代工的

小米火龙CPU”并非小米自研芯片&#xff0c;而是指搭载在小米手机上的部分高通骁龙处理器因发热问题被调侃为“火龙”。以下是几款被称为“火龙”的高通CPU及其代工情况&#xff1a; 骁龙810 骁龙810是高通历史上最著名的“火龙”之一&#xff0c;采用台积电20nm工艺代工。由于…...

Educational Codeforces Round 174 (Rated for Div. 2)

Problem - B - Codeforces 之前没思路&#xff0c;我看了看答案。 思路不就来了&#xff1a; 简而言之&#xff0c;BFS那样遍历周围&#xff08;上下左右均一次&#xff09;&#xff0c;如果有同色&#xff0c;就把这部分相邻的隔开&#xff0c;可以得到两块陌生人集合&#x…...