文章目录

  • @Transactional属性
  • @Transactional用法
  • 解决方案

@Transactional属性

@Transactional用法

@Transactional 可以作用于接口、接口方法、类以及类方法上。当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。
虽然 @Transactional 注解可以作用于接口、接口方法、类以及类方法上,但是 Spring 建议不要在接口或者接口方法上使用该注解,因为这只有在使用基于接口的代理时它才会生效。另外, @Transactional 注解应该只被应用到 public 方法上,这是由 Spring AOP 的本质决定的。如果你在 protected、private 或者默认可见性的方法上使用 @Transactional 注解,这将被忽略,也不会抛出任何异常。
默认情况下,只有来自外部的方法调用才会被AOP代理捕获,也就是,类内部方法调用本类内部的其他方法并不会引起事务行为,即使被调用方法使用@Transactional注解进行修饰。




注意:有时候在开发时往往添加注解后却无法回滚
原因:默认spring事务只在发生未捕获的RuntimeException时才回滚
spring aop 异常捕获原理:被拦截的方法需显式抛出异常,并不能经任何处理,这样aop代理才能捕获到方法的异常,才能进行回滚,默认情况下aop只捕获 RuntimeException 的异常,但可以通过配置来捕获特定的异常并回滚
换句话说在service的方法中不使用try catch 或者在catch中最后加上throw new runtimeexcetpion(),这样程序异常时才能被aop捕获进而回滚。

解决方案

  • 在service层方法抛出RuntimeException异常(如在Catch中需要抛出自定义的异常则只需自定义异常继承RuntimeException即可),并继续捕获和处理这个异常。

  • 在service层方法的catch语句中增加:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
    语句,手动回滚,这样上层就无需去处理异常

Transactional相关推荐

  1. @Transactional注解最容易忽视的三个失效场景!

    @Transactional注解在以下场景中使用,是会失效的,切记! 1.非public方法 spring对注解事务的方法进行校验,修饰符是不是public,不是 public则不会获取@Transa ...

  2. 3 种场景 @Transactional 失效的解决方法

    以下文章来源方志朋的博客,回复"666"获面试宝典 来源 | blog.csdn.net/qq_20597727/article/details/84900994 Transact ...

  3. Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 事务管理在系统开发中是不可缺少的一部分,Spring提供了 ...

  4. @aspect注解类不生效_springboot:@Transactional注解 VS @Service注解

    1. Transactional注解与Service/Component注解冲突? 之前遇到一个神奇的事情--用Transactional注解的方法,数据处理了一半,后面的数据处理抛出异常后,没有回滚 ...

  5. Spring Transactional还能导致生产事故?

    在Spring中进行事务管理非常简单,只需要在方法上加上注解@Transactional,Spring就可以自动帮我们进行事务的开启.提交.回滚操作.甚至很多人心里已经将Spring事务与@Trans ...

  6. 一口气说出 6 种 @Transactional 注解的失效场景

    一.事务 事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种. 编程式事务:是指在代码中手动的管理事务的提交.回滚等操作,代码侵入性比较强, ...

  7. Spring_Spring@Transactional

    Spring事务的传播行为 在service类前加上@Transactional,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务. Spring默认情况下会对运行期例 ...

  8. Spring 事务之@Transactional

    在业务代码中,有如下两种情况,比如: throw new RuntimeException("xxxxxxxxxxxx"); 事务回滚 throw new Exception(&q ...

  9. spring@Transactional注解事务不回滚不起作用无效的问题处理

    这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚.后来终于找到了原因. 如果你也出现了这种情况,可以从下面开始排查. 一.特性 先来了解一下@Transactio ...

  10. SpringBoot之事务管理Transactional

    以前学ssh ssm都有事务管理service层通过applicationContext.xml配置,所有service方法都加上事务操作: 用来保证一致性,即service方法里的多个dao操作,要 ...

最新文章

  1. 大小端判断和网络字节序
  2. spring五:获取容器中对象信息
  3. hp服务器安装exsi5.5
  4. 专访小米欧阳辰:深度揭秘小米广告平台的构建、底层模块和坑
  5. 【Java报错】GP数据库 function point(unknown) is not unique.Could not choose a best candidate function 问题解决
  6. SPH(光滑粒子流体动力学)流体模拟实现四:各向异性(Anisotropic)表面光滑(2)
  7. Maven使用技巧001--- 离线更新nexus中央仓库索引的方案
  8. 第一章数据分析与挖掘概述
  9. wps出现安装installer_我安装WPS2002时显示,该计算机缺少installscript引擎,请运行i
  10. 第三章:使用HiTool下载程序
  11. CUDA 编程 __launch_bounds__的应用方法
  12. linux limits.conf 生效,linux修改limits.conf不生效
  13. python画罗小黑_python股票数据聚类算法:罗小黑战记的股票_XAC配资之家
  14. Oracle函数——字符函数
  15. 属羊的几月出生最好命
  16. 干货 | Trip.com APP QUIC应用和优化实践
  17. Vijos - 想越狱的小杉(最短路)
  18. Quartz 2D 涂鸦
  19. 【转】【技术博客】Spark性能优化指南——高级篇
  20. 人像美妆效果实现(贴纸)——OpenGL实现

热门文章

  1. [PyTorch笔记]数据操作
  2. Adobe Camera Raw(RAW处理工具)for win​
  3. 【学习】一些有趣的数学分析题目
  4. Lua语言之table表
  5. lua语言入门学习(八)项目初体验之玩家事件(2)
  6. MFC单文档应用程序的基础
  7. Spreading the Wealth UVA - 11300 (分金币)(分析求中位数)
  8. Vue实现记住账号密码功能
  9. CHY的Spring学习笔记---师从动力节点王鹤老师(B站白嫖)
  10. 【汇正财经】沪深创午盘探底回升