spring注解:@Transactional使用简介

ops/2024/9/23 9:23:45/

@Transactional 是 Spring 框架提供的声明式事务管理的一个核心注解,主要用于对方法进行事务管理。它能够确保方法在执行过程中的多个操作要么全部成功,要么全部失败。这种事务管理方式可以简化开发人员编写事务管理代码的工作量,提高开发效率。

  1. 作用范围@Transactional 注解可以应用于方法或类上。如果应用于方法上,仅对被注解的方法提供事务管理;如果应用于类上,则对类中的所有方法提供事务管理。

  2. 事务传播行为@Transactional 注解的 propagation 属性可以指定事务的传播行为。常见的传播行为有:

    • Propagation.REQUIRED:默认值,如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
    • Propagation.REQUIRES_NEW:创建一个新的事务,如果当前存在事务,则挂起当前事务。
    • Propagation.SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式执行。
    • 其他传播行为还包括:Propagation.MANDATORYPropagation.NOT_SUPPORTEDPropagation.NEVERPropagation.NESTED
  3. 事务隔离级别@Transactional 注解的 isolation 属性可以指定事务的隔离级别。常见的隔离级别有:

    • Isolation.DEFAULT:使用后端数据库的默认隔离级别。
    • Isolation.READ_UNCOMMITTED:最低的隔离级别,允许读取未提交的数据。
    • Isolation.READ_COMMITTED:保证读取到的数据是已经提交的数据。
    • Isolation.REPEATABLE_READ:保证在一个事务中,多次读取同一数据的结果是一致的。
    • Isolation.SERIALIZABLE:最高的隔离级别,完全串行执行事务。
  4. 事务超时时间@Transactional 注解的 timeout 属性可以指定事务的超时时间(以秒为单位)。如果事务在指定的时间内没有完成,将被自动回滚。

  5. 只读属性@Transactional 注解的 readOnly 属性可以指定事务是否为只读。如果设置为 true,则事务将被标记为只读,这有助于提高数据库性能。

  6. 回滚规则@Transactional 注解的 rollbackFornoRollbackFor 属性可以指定哪些异常会导致事务回滚,哪些异常不会。

  7. 事务管理器@Transactional 注解的 transactionManager 属性可以指定使用的事务管理器(例如:PlatformTransactionManager)的名称。

以下是一个简单的示例,展示如何在 Spring 应用程序中使用 @Transactional 注解:

java">import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;@Service
public class UserService {@Transactionalpublic void addUser(User user) {// 插入用户信息到数据库}@Transactional(readOnly = true)public User getUser(Long id) {// 根据 ID 查询用户信息}
}

在这个示例中,addUser 方法和 getUser 方法都被 @Transactional 注解修饰,分别表示添加用户操作需要事务支持,而查询用户操作是只读的。


http://www.ppmy.cn/ops/89198.html

相关文章

显示学习5(基于树莓派Pico) -- 彩色LCD的驱动

和这篇也算是姊妹篇,只是一个侧重SPI协议,一个侧重显示驱动。 总线学习3--SPI-CSDN博客 驱动来自:https://github.com/boochow/MicroPython-ST7735 所以这里主要还是学习。 代码Init def __init__( self, spi, aDC, aReset, aCS) :"&…

vue在Index.html中自定义全局变量

在inde.html定义整个项目都能访问的变量,用于判断等等 直接在 index.html中 js <script>window.VUE_APP_NODE_ENV <% process.env.NODE_ENV %>;</script> 我这里是 赋值了 环境值. 可以改变任意值都行. 要用的地方直接判断就行 if (VUE_APP_NODE_ENV…

面试经典算法150题系列-跳跃游戏||

跳跃游戏|| 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向前跳转的最大长度。换句话说&#xff0c;如果你在 nums[i] 处&#xff0c;你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 num…

MyBatis 如何通过拦截器修改 SQL

目录 1. 实现Interceptor接口2. 注册配置文件 假如我们想实现多租户&#xff0c;或者在某些 SQL 后面自动拼接查询条件。在开发过程中大部分场景可能都是一个查询写一个 SQL 去处理&#xff0c;我们如果想修改最终 SQL 可以通过修改各个 mapper.xml 中的 SQL 来处理。 但实际过…

WebKit简介及工作流程

引言 随着互联网的飞速发展&#xff0c;浏览器作为用户访问网络世界的门户&#xff0c;其性能和稳定性日益成为关注的焦点。在众多浏览器引擎中&#xff0c;WebKit以其卓越的渲染性能和跨平台特性&#xff0c;赢得了广泛赞誉。作为前端技术专家&#xff0c;深入了解WebKit的架…

C语言 | Leetcode C语言题解之第318题最大单词长度乘积

题目&#xff1a; 题解&#xff1a; int maxProduct(char ** words, int wordsSize){int masks[wordsSize];memset(masks, 0, sizeof(masks));for(int i 0; i < wordsSize; i) {int len strlen(words[i]);for(int j 0; j < len; j) {masks[i] | 1 << (words[i]…

38 器件移动、旋转、镜像、对齐、等间距操作介绍39 器件、网络、过孔锁定与解锁操作40 相同模块复用操作41 测量、查询功能介绍

38 器件移动、旋转、镜像、对齐、等间距操作介绍&&39 器件、网络、过孔锁定与解锁操作&&40 相同模块复用操作&& 41 测量、查询功能介绍 第一部分 38 器件移动、旋转、镜像、对齐、等间距操作介绍第二部分 39 器件、网络、过孔锁定与解锁操作第三部分 4…

校园选课助手【6】-使用验证码验证抢课接口

需求分析&#xff1a;抢课开放时&#xff0c;大量用户同时访问抢课接口&#xff0c;防止有人利用程序恶意刷接口进行抢课。 1.导入验证码依赖 <!--验证码依赖--><dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha<…