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

@Transactional 参数详解

@Transactional 注解在 Spring 框架中用于声明一个方法或类应该在事务中执行。事务是一种确保数据库操作要么全部成功,要么全部失败的机制,确保数据的一致性和完整性。以下是 @Transactional 注解的参数详解:

  1. propagation: 事务传播行为,指定事务的传播方式。常见的传播行为有:

    • REQUIRED(默认值):如果当前存在事务,则加入该事务;如果当前没有事务,则新建一个事务。
    • REQUIRES_NEW:每个事务都会开启一个新事务,不管当前是否存在事务。
    • SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务方式执行。
    • NOT_SUPPORTED:以非事务方式执行,如果当前存在事务,则挂起它。
    • MANDATORY:要求当前存在事务;如果当前没有事务,则抛出异常。
    • NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
    • NESTED:如果当前存在事务,则嵌套在当前事务中执行;如果当前没有事务,则新建一个事务。
  2. isolation: 事务隔离级别,指定事务的隔离级别。常见的隔离级别有:

    • DEFAULT:使用数据库的默认隔离级别。
    • READ_UNCOMMITTED:允许读取未提交的数据,可能会出现脏读。
    • READ_COMMITTED:只允许读取已提交的数据,可以防止脏读。
    • REPEATABLE_READ:在事务期间,多次读取同一数据的结果是相同的,可以防止不可重复读。
    • SERIALIZABLE:最高隔离级别,完全隔离的事务,防止脏读、不可重复读和幻读。
  3. timeout: 事务超时时间,指定事务的超时时间(以秒为单位)。如果事务在指定的时间内没有完成,则会被强制回滚。

  4. readOnly: 事务是否是只读的。设置为 true 可以优化性能,因为 Spring 可以利用只读事务来进行一些优化,防止对数据库进行写操作。

  5. rollbackFor: 指定哪些异常类型会导致事务回滚。如果抛出了这些异常类型中的任何一个,则事务会被回滚。

  6. noRollbackFor: 指定哪些异常类型不会导致事务回滚。如果抛出了这些异常类型中的任何一个,则事务不会回滚,即使 rollbackFor 参数中指定的异常类型被抛出。

  7. rollbackForClassName: 通过异常的类名指定哪些异常会导致事务回滚。这是 rollbackFor 参数的类名字符串版本。

  8. noRollbackForClassName: 通过异常的类名指定哪些异常不会导致事务回滚。这是 noRollbackFor 参数的类名字符串版本。

@Transactional(propagation = Propagation.REQUIRED,isolation = Isolation.READ_COMMITTED,timeout = 30,readOnly = false,rollbackFor = {SQLException.class},noRollbackFor = {CustomException.class}
)
public void someTransactionalMethod() {// 业务逻辑
}

这些参数可以根据实际需要进行配置,以达到对事务的精确控制。

相关文章:

  • OpenGL/GLUT实践:实现反弹运动的三角形动画与键盘控制(电子科技大学信软图形与动画Ⅱ实验)
  • 数据分析——基础
  • cowrie部署中遇到的坑
  • sqlite3 相关知识
  • 【佳学基因检测】在bagisto中,grouped products(同组产品)和bundled products(打包产品)有什么不同?
  • Nvidia GPU benchmark压力测试工具
  • 003: Visual Studio 配置 VTK 开发环境的方法与比较
  • Qt工程实践_06_Qt MSVC2O17编译器下的程序添加VS2017生成的动态链接库方法
  • Windows用户取消共享文件夹密码方法(Method for Windows Users to Cancel Shared Folder Password)
  • 科研绘图系列:R语言柱状图分布(histogram plot)
  • Mybatis【分页插件,缓存,一级缓存,二级缓存,常见缓存面试题】
  • 重头开始嵌入式第三十四天(数据库二)
  • html备忘录
  • IDEA 2024最新软件下载
  • 【全网最全】2024年数学建模国赛C题超详细保奖思路+可视化图表+成品论文+matlab/python代码等(后续会更新
  • python3.6+scrapy+mysql 爬虫实战
  • 2017届校招提前批面试回顾
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • C++入门教程(10):for 语句
  • IP路由与转发
  • leetcode讲解--894. All Possible Full Binary Trees
  • SpringBoot几种定时任务的实现方式
  • ubuntu 下nginx安装 并支持https协议
  • Xmanager 远程桌面 CentOS 7
  • 第2章 网络文档
  • 高程读书笔记 第六章 面向对象程序设计
  • 前端性能优化——回流与重绘
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 微信支付JSAPI,实测!终极方案
  • 为物联网而生:高性能时间序列数据库HiTSDB商业化首发!
  • 验证码识别技术——15分钟带你突破各种复杂不定长验证码
  • 交换综合实验一
  • #Linux(帮助手册)
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (10)STL算法之搜索(二) 二分查找
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C11) 泛型表达式
  • (el-Transfer)操作(不使用 ts):Element-plus 中 Select 组件动态设置 options 值需求的解决过程
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (八)Flink Join 连接
  • (初研) Sentence-embedding fine-tune notebook
  • (二)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (面试必看!)锁策略
  • (四)js前端开发中设计模式之工厂方法模式
  • (万字长文)Spring的核心知识尽揽其中
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转)Oracle 9i 数据库设计指引全集(1)
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .Net - 类的介绍
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • .NET 除了用 Task 之外,如何自己写一个可以 await 的对象?
  • .net 连接达梦数据库开发环境部署
  • .NET 命令行参数包含应用程序路径吗?
  • .net6使用Sejil可视化日志
  • .NET周刊【7月第4期 2024-07-28】