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

@Transactional 注解使用的注意事项

事务管理

事务管理在系统开发中是不可缺少的一部分,Spring提供了很好的事务管理机制,主要分为编程式事务和声明式事务两种。

编程式事务: 是指在代码中手动的管理事务的提交、回滚等操作,代码侵入比较强。

声明式事务: 基于AOP面向切面的,它将具体业务与事务处理部分解耦,代码侵入性很低,所以在实际开发中声明式事务比较多。声明式事务有两种实现方式,分别式基于TX和AOP的xml配置文件方式,第二种就是基于 @Transactional注解。

可以用在哪些地方?

@Transactional可以用在接口、类、类方法

  • 作用于:当把@Transactional注解放在类上时,表示所有该类的 public 方法都配置相同的事务属性信息。

  • 作用于方法:当类配置了@Transactional,方法也配置了@Transactional,方法的事务会覆盖类的事务配置信息。

  • 作用于接口:不推荐这种使用方法,因为一旦标注在 Interface 上并配置了 Spring AOP 使用 CGLib 动态代理,将会导致 @Transactional 注解失效。

@Transactional 注解参数说明

参数功能
readOnly该属性用于设置当前事务是否为只读事务,设置为true表示只读,false表示可读写,默认为false。例如:@Transactional(readOnly=true)
rollbackFor该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常时,则进行事务回滚。例如:指定单一异常类:@Transactional(rollbackFor=RuntimeException.class),也可以指定多个异常类,默认是:RuntimeException和Error
rollbackForClassName该属性用于设置需要进行回滚的异常类名称数组,当方法抛出指定异常名称的异常时,则进行事务回滚。例如:指定单一异常类名称@Transactional(rollbackForClassName=“RuntimeException”)指定多个:@Transactional(rollbackForClassName={“RuntimeException”,“Exception”})
noRollbackFor该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚。例如:指定单一异常类 @Transactional(noRollbackFor=RuntimeException.class) 指定多个:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})
noRollbackForClassName该属性用于设置不需要进行回滚的异常类名称数组。
propagation该属性用于设置事务的传播行为,例如:@Transactional(propagation=Propagation.NOT_SUPPORTED)
timeout该属性用于设置事务的超时秒数,默认值为-1表示永不超时
isolation该属性用于设置底层数据库的事务隔离级别,事务隔离界别用于处理多事务并发情况,通常使用数据库默认的隔离级别即可。

注意事项以及失效情况

  • @Transactional 应用在非 public 修饰的方法上

  • @Transactional 注解属性 propagation 设置错误,配置以下三种 propagation,事务将不会发生回滚。

    • PROPAGATION_SUPPORTS:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。

    • PROPAGATION_NOT_SUPPORTED:以非事务方式运行,如果当前存在事务,则把当前事务挂起。

    • PROPAGATION_NEVER:以非事务方式运行,如果当前存在事务,则抛出异常。

  • @Transactional 注解属性 rollbackFor 设置错误

  • 同一个类中方法调用,导致@Transactional失效

  • 异常被catch吞掉导致失效

  • 数据库引擎不支持事务

 

http://www.lryc.cn/news/327588.html

相关文章:

  • 电商系列之库存
  • Apache HBase(二)
  • 【设计模式】原型模式详解
  • 企微侧边栏开发(内部应用内嵌H5)
  • 如何确定最优的石油管道位置
  • FPGA 图像边缘检测(Canny算子)
  • 2024.3.28学习笔记
  • 33.HarmonyOS App(JAVA)鸿蒙系统app数据库增删改查
  • 寄主机显示器被快递搞坏了怎么办?怎么破?
  • python爬虫-bs4
  • SpringBoot学习之ElasticSearch下载安装和启动(Mac版)(三十一)
  • OC对象 - Block解决循环引用
  • Java设计模式之装饰器模式
  • Java基础知识总结(25)
  • Vue3 实现基于token 用户登录
  • 在word中显示Euclid Math One公式的问题及解决(latex公式,无需插件)
  • 江协科技STM32:按键控制LED光敏传感器控制蜂鸣器
  • 最佳矢量绘图设计软件Sketch for Mac v99.5 最新中文激活版
  • 【IntelliJ IDEA】运行测试报错解决方案(附图)
  • 【Kotlin】List、Set、Map简介
  • OpenCV 形态学处理函数
  • 互联网摸鱼日报(2024-03-27)
  • 2014年认证杯SPSSPRO杯数学建模B题(第二阶段)位图的处理算法全过程文档及程序
  • C++基本语法
  • Node Sass does not yet support your current environment
  • 长陆工业自动控制系统邀您到场参观2024第13届生物发酵产品与技术装备展
  • 数据仓库——维度表更新
  • Web3创作整理 - 2024-02-23 ~ 2024-03-25
  • CSS(一)---【CSS简介、导入方式、八种选择器、优先级】
  • 智慧公厕解决方案打造更加智能的卫生空间