@Transactional注解可以作用于接口、接口方法、类以及类方法上

  1. 当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性
  2. 当作用在方法级别时会覆盖类级别的定义
  3. 当作用在接口和接口方法时则只有在使用基于接口的代理时它才会生效,也就是JDK动态代理,而不是Cglib代理
  4. 当在 protected、private 或者默认可见性的方法上使用 @Transactional 注解时是不会生效的,也不会抛出任何异常
  5. 默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰

@Transactional注解的可用参数

readOnly
该属性用于设置当前事务是否为只读事务,设置为true表示只读,false则表示可读写,默认值为false

rollbackFor
该属性用于设置需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,则进行事务回滚。例如:

  1. 指定单一异常类:@Transactional(rollbackFor=RuntimeException.class)
  2. 指定多个异常类:@Transactional(rollbackFor={RuntimeException.class, BusnessException.class})

rollbackForClassName
该属性用于设置需要进行回滚的异常类名称数组,当方法中抛出指定异常名称数组中的异常时,则进行事务回滚。例如:

  1. 指定单一异常类名称:@Transactional(rollbackForClassName=“RuntimeException”)
  2. 指定多个异常类名称:@Transactional(rollbackForClassName={“RuntimeException”,“BusnessException”})

noRollbackFor
该属性用于设置不需要进行回滚的异常类数组,当方法中抛出指定异常数组中的异常时,不进行事务回滚

noRollbackForClassName
参照上方的例子

timeout
该属性用于设置事务的超时秒数,默认值为-1表示永不超时

propagation
该属性用于设置事务的传播行为
例如:@Transactional(propagation=Propagation.NOT_SUPPORTED)

事物传播行为介绍:
@Transactional(propagation=Propagation.REQUIRED) 如果有事务, 那么加入事务, 没有的话新建一个(默认)
@Transactional(propagation=Propagation.NOT_SUPPORTED) 容器不为这个方法开启事务
@Transactional(propagation=Propagation.REQUIRES_NEW) 不管是否存在事务,都创建一个新的事务,原来的挂起,新的执行完毕,继续执行老的事务
@Transactional(propagation=Propagation.MANDATORY) 必须在一个已有的事务中执行,否则抛出异常
@Transactional(propagation=Propagation.NEVER) 必须在一个没有的事务中执行,否则抛出异常(与Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS) 如果其他bean调用这个方法,在其他bean中声明事务,那就用事务.如果其他bean没有声明事务,那就不用事务

isolation
该属性用于设置底层数据库的事务隔离级别

事务隔离级别介绍:

@Transactional(isolation = Isolation.READ_UNCOMMITTED)读取未提交数据(会出现脏读, 不可重复读) 基本不使用
@Transactional(isolation = Isolation.READ_COMMITTED)读取已提交数据(会出现不可重复读和幻读)
@Transactional(isolation = Isolation.REPEATABLE_READ)可重复读(会出现幻读)
@Transactional(isolation = Isolation.SERIALIZABLE)串行化

什么是脏读、幻读、不可重复读?

脏读 : 一个事务读取到另一事务未提交的更新数据
不可重复读 : 在同一事务中, 多次读取同一数据返回的结果有所不同, 换句话说, 后续读取可以读到另一事务已提交的更新数据. 相反, "可重复读"在同一事务中多次读取数据时, 能够保证所读数据一样, 也就是后续读取不能读到另一事务已提交的更新数据
幻读 : 一个事务读到另一个事务已提交的insert数据

其中MySQL默认使用的隔离级别为REPEATABLE_READ、Oracle的为READ_COMMITTED

@Transactional注解详解相关推荐

  1. Transactional注解详解

    1.@Transactional注解可以作用于哪些地方? @Transactional 可以作用在接口.类.类方法. 作用于类:当把@Transactional 注解放在类上时,表示所有该类的publ ...

  2. 26.SpringBoot事务注解详解

    转自:https://www.cnblogs.com/kesimin/p/9546225.html @Transactional spring 事务注解 1.简单开启事务管理 @EnableTrans ...

  3. spring-boot注解详解(一)

    spring-boot注解详解(一) @SpringBootApplication @SpringBootApplication = (默认属性)@Configuration + @EnableAut ...

  4. 事务的传播特性之@Transactional使用详解

    事务的传播特性之@Transactional使用详解 一.@Transactional 7个传播特性 常用配置参数 二.编码详解 1.准备基础代码 2.REQUIRED 3.SUPPORTS 4.MA ...

  5. mybatis注解详解

    mybatis注解详解 首 先当然得下载mybatis-3.0.5.jar和mybatis-spring-1.0.1.jar两个JAR包,并放在WEB-INF的lib目录下 (如果你使用maven,则 ...

  6. 开启注解缓存_Spring Boot 2.x基础教程:进程内缓存的使用与Cache注解详解

    随着时间的积累,应用的使用用户不断增加,数据规模也越来越大,往往数据库查询操作会成为影响用户使用体验的瓶颈,此时使用缓存往往是解决这一问题非常好的手段之一.Spring 3开始提供了强大的基于注解的缓 ...

  7. Spring零配置之@Configuration注解详解

    转载自 Spring零配置之@Configuration注解详解 @Configuration介绍 Spring3.0之前要使用Spring必须要有一个xml配置文件,这也是Spring的核心文件,而 ...

  8. Spring Boot注解详解

    文章目录 使用注解的优势 注解详解(配备了完善的释义) 注解列表如下 JPA注解 springMVC相关注解 全局异常处理 项目中具体配置解析和使用环境 使用注解的优势 采用纯java代码,不在需要配 ...

  9. 【SpringBoot 】SpringBoot注解详解

    [SpringBoot ]SpringBoot注解详解 一.注解(annotations)列表  @SpringBootApplication:包含了@ComponentScan.@Configura ...

最新文章

  1. Scrapy_redis框架原理分析并实现断点续爬以及分布式爬虫
  2. Scala 函数传名调用(call-by-name)
  3. 互联网日报 | 4月20日 星期二 | 华为正式宣布卖车;携程在港交所挂牌上市;广州期货交易所正式揭牌...
  4. Mac下的浏览器速度比较,Chrome 得分最高
  5. pytorch查缺补漏之CUDA,自动求导
  6. 程序员,Linux 下如何避免从删库到跑路的悲剧?
  7. windows 下 opencv 3.x 的安装及常见问题的解决
  8. 【引向】全栈开发工程师之路
  9. 浏览器极速模式和兼容模式差异
  10. 大型网页游戏开发流程
  11. D*路径搜索算法原理解析及Python实现
  12. 网易公开课视频及字幕下载
  13. linux下lamealsa进行音频流操作(八)用ffmpeg将mp3转为wav
  14. 蒙特卡洛树搜索(MCTS)的实例代码
  15. android 调用系统打印
  16. 猫叫狗叫java_狗叫猫叫动物叫声手机版|狗叫猫叫动物叫声安卓版下载 v1.1 - 跑跑车安卓网...
  17. ife2018 零基础学院 day 4
  18. 关于Windows10系统启用SMB文件共享支持服务
  19. 四. 常用EMC防护器件选型学习笔记
  20. 2023最新SSM计算机毕业设计选题大全(附源码+LW)之java磐基建筑机械租赁有限公司机械租赁系统41c32

热门文章

  1. Cocos2D-X屏幕适配新解
  2. 请教,如何从file的fullname(string类型)获取file对象?
  3. 【ChatGPT】阿里版 ChatGPT 突然官宣意味着什么?
  4. Redis——使用Jedis操作stream
  5. MySql添加索引的几种方式
  6. C4D模型工具—滑动
  7. oracle 酒店客户数量,上海哪些五星级酒店客户数量比较多
  8. HTML、CSS、js开发工具介绍
  9. 几率大的Redis面试题(含答案)
  10. react如何刷新当前页面_react怎么强制刷新页面?