Spring Boot 中的事务注解

news2024/9/21 4:31:43

Spring Boot 中的事务注解

在应用程序中,事务管理是一个非常重要的概念。事务是指一系列的操作,这些操作要么全部成功,要么全部失败。在Spring Boot中,可以使用事务注解来管理事务。在使用事务注解的时候,一个非常重要的概念就是事务传播行为。

什么是事务传播行为

事务传播行为是指在一个方法调用另一个方法时,会发生什么样的事务行为。在Spring Boot中,事务传播行为是由Spring框架来管理的。Spring框架使用了一些规则来决定在不同的情况下应该如何处理事务。

Spring Boot 中的事务注解

Spring Boot提供了一个@Transactional注解来控制事务。这个注解可以放在方法上,也可以放在类上。如果放在类上,那么所有的方法都将继承这个注解。

@Transactional注解有一些非常重要的属性,包括propagationisolationpropagation属性用来指定事务传播行为,isolation属性用来指定事务的隔离级别。

@Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED)
public void doSomething() {
    // ...
}

在上面的代码中,propagation属性指定了事务传播行为为Propagation.REQUIRED,表示如果当前已经存在一个事务,那么就使用这个事务;如果当前不存在事务,那么就创建一个新的事务。isolation属性指定了事务的隔离级别为Isolation.READ_COMMITTED,表示读取已提交的数据。

Spring Boot 中的事务原理

在Spring Boot中,事务是由Spring框架来管理的。Spring框架使用了AOP(面向切面编程)技术来实现事务的管理。具体来说,Spring框架通过代理机制来实现事务的管理。

当一个方法被@Transactional注解修饰时,Spring会为这个方法创建一个代理对象。当这个方法被调用时,实际上是调用了代理对象的方法。代理对象在方法执行前会开启一个事务,在方法执行后根据执行结果来决定是提交事务还是回滚事务。

Spring框架使用了一个TransactionInterceptor拦截器来实现事务管理。这个拦截器会在方法执行前后进行拦截,并根据事务的传播行为和异常情况来决定是开启一个新的事务还是使用已经存在的事务,并在方法执行后根据执行结果来决定是提交事务还是回滚事务。

Spring Boot 中的事务使用

在Spring Boot中,我们可以使用@Transactional注解来控制事务。在使用@Transactional注解时,需要注意以下几点:

  1. @Transactional注解只能放在public方法上。
  2. 方法必须是非静态的。
  3. 如果在同一个类中调用了带有@Transactional注解的方法,那么事务将不会起作用。这是因为Spring是通过代理来实现事务管理的,而代理只能在方法调用时生效。
  4. 如果在一个类中同时存在多个带有@Transactional注解的方法,那么这些方法将共享同一个事务。
  5. 在使用@Transactional注解时,一定要确保注解配置正确,否则可能会导致事务无法回滚或者回滚不完全的情况。

下面是一个使用@Transactional注解的例子:

@Service
public class UserService {

    @Autowired
    private UserRepository userRepository;

    @Transactional(rollbackFor = Exception.class)
    public void addUser(User user) {
        userRepository.save(user);
        // ...
## 代码解读

在上面的代码中,我们定义了一个`UserService`类,这个类使用了`@Transactional`注解来控制事务。在`addUser`方法中,我们首先调用了`userRepository.save(user)`方法来保存用户信息。由于这个方法上使用了`@Transactional`注解,因此在调用`userRepository.save(user)`方法之前,Spring框架会开启一个事务。如果在`userRepository.save(user)`方法执行期间发生了异常,那么这个事务将会被回滚。

`@Transactional`注解还有一些其他的属性,包括`readOnly`、`timeout`和`noRollbackFor`等。这些属性可以帮助我们更好地控制事务的行为。例如,`readOnly`属性可以指定事务是否为只读事务;`timeout`属性可以指定事务超时时间;`noRollbackFor`属性可以指定哪些异常不应该回滚事务。

```java
@Transactional(readOnly = true, timeout = 30, noRollbackFor = IllegalArgumentException.class)
public void doSomething() {
    // ...
}

在上面的代码中,我们使用了@Transactional注解的readOnlytimeoutnoRollbackFor属性。这个方法被指定为只读事务,并且超时时间为30秒。如果在方法执行期间发生了IllegalArgumentException异常,那么这个事务将不会被回滚。

总结

在Spring Boot中,事务管理是一个非常重要的概念。我们可以使用事务注解来控制事务的行为。在使用事务注解时,我们需要注意事务传播行为、事务隔离级别以及其他配置属性。Spring框架使用AOP技术来实现事务的管理,具体来说,是通过代理机制来实现的。在使用事务注解时,我们需要确保注解配置正确,否则可能会导致事务无法回滚或者回滚不完全的情况。

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

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

相关文章

js内存泄漏及排查详解

js内存泄漏及排查详解 常见内存泄漏及解决方案 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。 隐式全局变量 在局部…

音频小说项目介绍

看小说、听音频,App,H5网站,小程序多端开发 一、主页 主页tabBar四个分类: 首页,分类,收藏,我的 最上方是搜索框 下方是轮播图,不但自动滚动,还有动画效果 下面分类有&#xf…

IDEA 或者SVN修改老项目的svn地址

公司svn地址修改了,ip修改了。本地还有代码没提交。这里介绍一下怎么在IDEA或svn修改为新地址,然后代码就可以直接提交了。网上也有文章介绍,但其中没注明一个关键点,导致很多人修改不成功。所以有了这篇文章。 IDEA下修改svn地址…

【Python】模块导入 ⑤ ( 主程序判断语句 | 模块中执行函数问题 | 制作自定义模块并执行函数 | 导入自定义模块会执行模块中的代码 )

文章目录 一、模块中执行函数问题1、制作自定义模块并执行函数2、导入自定义模块会执行模块中的代码3、主程序判断语句4、代码示例 - 主程序判断语句 一、模块中执行函数问题 1、制作自定义模块并执行函数 如果在自定义模块中 , 定义了函数 , 并且调用了该函数 ; 如下代码所示…

【TCP/IP】多播 - 定义、原理及编程实现 (TTL、多播组、多播消息)

目录 多播 多播的原理 多播的数据传输时的特点 TTL 的概念 TTL 和 多播组的配置方法 多播的编程与实现 发送者 接收者 多播 多播是一种介于单播和广播通信之间的技术方式,可以将发送者所需要发送的数据包分别发送给分散在不同子网中的一组接收者。 多播的原…

MySQL - 第11节 - MySQL事务管理

1.事务的概念 事务的概念: • 上层看起来比较简单的需求,可能对应的后端要做很多工作,后端这些工作组合起来才是一个完整的需求解决的方案。 • 事务由一条或多条SQL语句组成,这些语句在逻辑上存在相关性,共同完成一个…

聊聊transformers库; 微软推出ZeRO++技术:优化大型AI模型训练时间和成本

🦉 AI新闻 🚀 微软推出ZeRO技术:优化大型AI模型训练时间和成本 摘要:据报道,微软研究人员最近发布了一项名为ZeRO的新技术,旨在优化训练大型AI模型时常遇到的数据传输成本和带宽限制问题,可大…

【0212】tcpdump抓包分析pg_hba.conf以password作为认证证方式下frontend与Backend之间身份验证过程(13 - 2)

文章目录 1. 回顾2. 密码校验通过3. 密码校验失败上一文:【0211】tcpdump抓包分析pg_hba.conf以password作为认证证方式下frontend与Backend之间身份验证过程(13 - 1) 1. 回顾 在上一节内容中,讲解了Backend对于接收到来自frontend的字符串明文密码,和来自于来自pg_auth…

荷兰宽带数据泄露 1

又要引入一个新工具RouterPassView 大多数现代路由器都可以备份一个路由器的配置文件,然后在需要的时候从文件中恢复配置。路由器的备份文件通常包含了像您的ISP的用户名重要数据/密码,路由器的登录密码,无线网络的KEY。 如果你忘记了这些密码…

第八十九天学习记录:C++核心:引用

引用的基本使用 作用&#xff1a;给变量起别名 语法&#xff1a;数据类型 &别名原名 #include<iostream> using namespace std;int main() {//引用基本语法//数据类型 &别名 原名int num1 3;int &num2 num1;cout << "num1" << n…

输入路由器IP地址进入IIS问题解决

0x01 问题描述 Windows10系统&#xff0c;路由器IP为192.168.1.1&#xff0c;本机获取的IP为192.168.1.110&#xff0c;但在浏览器URL输入路由器IP时却没有进入路由登录页&#xff0c;而是进了IIS欢迎页面。 0x02 问题分析 由于我本机IP不是192.168.1.1&#xff0c;所以排除与…

第八十七天学习记录:Linux基础:基础指令Ⅱ

touch创建文件 可以通过touch命令创建文件 语法&#xff1a;touch Linux路径 1、touch命令无选项&#xff0c;参数必填&#xff0c;表示要创建的文件路径&#xff0c;相对、绝对、特殊路径符均可以使用 cat命令 查看文件内容 首先用Vim编辑器在刚刚新建的tanktest.txt中编辑…

MyBatis学习笔记--中篇

MyBatis学习 文章目录 MyBatis学习1、MyBatis 配置解析1.1、核心配置文件1.2、事务管理器&#xff08;transactionManager&#xff09;1.3、数据源&#xff08;DataSource&#xff09;1.4、属性&#xff08;properties&#xff09;1.5、类型别名&#xff08;typeAliases&#x…

1. AGPC-SLAM: Absolute Ground Plane Constrained 3D Lidar SLAM

AGPC-SLAM: Absolute Ground Plane Constrained 3D Lidar SLAM overview 关键思路 odom约束 回环检测约束 地面约束 总体约束 问题 地面约束似乎倾向于全部对齐到第一个平面&#xff0c;也就是说该方案假设了所有地面方程是同一个平面。后面的实验也验证了上述假设有问题&…

EfficientDet(EfficientNet+BiFPN)论文超详细解读(翻译+学习笔记+代码实现)

前言 在之前我们介绍过EfficientNet&#xff08;直通车&#xff1a;【轻量化网络系列&#xff08;6&#xff09;】EfficientNetV1论文超详细解读&#xff08;翻译 &#xff0b;学习笔记代码实现&#xff09; 【轻量化网络系列&#xff08;7&#xff09;】EfficientNetV2论文超详…

Linux:etc/group

etc/group文件中保存着系统中所有组的名称&#xff0c;以及每个组中的成员列表。 文件中的一行为一个组的信息&#xff0c;具体如下&#xff1a; 如果组口令字段为x的话&#xff0c;就还有一个etc/gshadow文件用于存放组口令。 GID用于标识一个组&#xff0c;应保证其唯一性。…

Spring Boot 中的事务回滚规则

Spring Boot 中的事务回滚规则 在应用程序中&#xff0c;事务管理是一个重要的概念。事务是指一系列的操作&#xff0c;这些操作要么全部成功&#xff0c;要么全部失败。在Spring Boot中&#xff0c;我们可以使用事务管理器来管理事务。在使用事务管理器的时候&#xff0c;一个…

ElasticSearch——复合查询

Elasticsearch 语雀&#xff08;完整笔记&#xff09; 复合&#xff08;compound&#xff09;查询&#xff1a;复合查询可以将其它简单查询组合起来&#xff0c;实现更复杂的搜索逻辑。常见的有两种&#xff1a; fuction score&#xff1a;算分函数查询&#xff0c;可以控制…

《计算机系统与网络安全》第七章 身份认证

&#x1f337;&#x1f341; 博主 libin9iOak带您 Go to New World.✨&#x1f341; &#x1f984; 个人主页——libin9iOak的博客&#x1f390; &#x1f433; 《面试题大全》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33…

【单片机】STM32单片机读取旋转编码器,TIM定时器捕获

文章目录 旋转编码器介绍主程序逻辑直接检测用外部中断检测下降沿定时器直接解码旋转编码器 旋转编码器介绍 旋转编码器简单来说&#xff0c;就是会输出2个PWM&#xff0c;依据相位可以知道旋转方向&#xff0c;依据脉冲个数可以知道旋转的角度。一般旋转一圈有一个固定数值的…