一、@transactional 的使用

1、一般在service里加@Transactional注解,不建议在接口上添加

2、加了此注解后每个业务方法执行时,都会开启一个事务,不过都是按照相同的管理机制。

3、@Transactional注解只能应用到public修饰符上,其它修饰符不起作用,但不报错。

4、默认情况下此注解会对unchecked异常进行回滚,对checked异常不回滚。

那什么是unchecked,什么是checked呢?通俗的说,编译器能检测到的是checked,检测不到的就是unchecked。派生于Error或者RuntimeException(比如空指针,1/0)的异常称为unchecked异常。继承自Exception得异常统称为checked异常,如IOException、TimeoutException等。

5、只读事务:

@Transactional(propagation=Propagation.NOT_SUPPORTED,readOnly=true)只读标志只在事务启动时应用,否则即使配置也会被忽略。启动事务会增加线程开销,数据库因共享读取而锁定(具体跟数据库类型和事务隔离级别有关)。通常情况下,仅是读取数据时,不必设置只读事务而增加额外的系统开销。

二、事务传播模式

Propagation枚举了多种事务传播模式,部分列举如下:

1、REQUIRED(默认模式):业务方法需要在一个容器里运行。如果方法运行时,已经处在一个事务中,那么加入到这个事务,否则自己新建一个新的事务。

2、NOT_SUPPORTED:声明方法不需要事务。如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个事务中被调用,该事务会被挂起,调用结束后,原先的事务会恢复执行。

3、REQUIRESNEW:不管是否存在事务,该方法总汇为自己发起一个新的事务。如果方法已经运行在一个事务中,则原有事务挂起,新的事务被创建。

4、 MANDATORY:该方法只能在一个已经存在的事务中执行,业务方法不能发起自己的事务。如果在没有事务的环境下被调用,容器抛出例外。

5、SUPPORTS:该方法在某个事务范围内被调用,则方法成为该事务的一部分。如果方法在该事务范围外被调用,该方法就在没有事务的环境下执行。

6、NEVER:该方法绝对不能在事务范围内执行。如果在就抛例外。只有该方法没有关联到任何事务,才正常执行。

7、NESTED:如果一个活动的事务存在,则运行在一个嵌套的事务中。如果没有活动事务,则按REQUIRED属性执行。它使用了一个单独的事务,这个事务拥有多个可以回滚的保存点。内部事务的回滚不会对外部事务造成影响。它只对DataSourceTransactionManager事务管理器起效。

三、不回滚解决方案

  • 1,检查方法是不是public
  • 2,检查异常是不是unchecked异常
  • 3,如果是unchecked异常也想回滚的话,注解上写明异常类型即可@Transactional(rollbackFor=Exception.class)

小编是一个有着5年工作经验的程序员,关于Java,自己有做材料的整合,一个完整学习Java的路线,学习材料和工具。需要的伙伴可以私信我,发送“交流”后就可免费获取。对于学习Java有任何问题(学习方法,学习效率,如何就业)都可以问我

@transactional 接口_Spring事物(@transactional注解)在什么情况下会失效,为什么?...相关推荐

  1. java 抽象类与接口区别是什么_JAVA中抽象类与接口的区别,分别在什么情况下使用它们...

    在网上看到很多人问关于"抽象类与接口的区别",因此本人想通过自己多年对JAVA开发的经验来总结一下抽象类与接口的区别以及分别在什么情况下使用它们. 在Java语言中, abstra ...

  2. Spring学习总结(30)——Spring事物(@transactional注解)在什么情况下会失效,为什么?

    一.@transactional 的使用 1.一般在service里加@Transactional注解,不建议在接口上添加 2.加了此注解后每个业务方法执行时,都会开启一个事务,不过都是按照相同的管理 ...

  3. @Transactional注解在什么情况下失效?

    引言 1.@Transactional 注解相信大家并不陌生,平时开发中很常用的一个注解,它能保证方法内多个数据库操作要么同时成功.要么同时失败. 2.使用@Transactional注解时需要注意许 ...

  4. java中事物的注解_编程式事务、XML配置事务、注解实现事务

    Spring2.0框架的事务处理有两大类: 1 编码式事务 , 这个不说. 2 声明式事务 , 就说这个. 声明式事务又有三种实现方法: 1 (第一种) 最早的方法,用TransactionProxy ...

  5. html调用接口_Spring 自调用事务失效,你是怎么解决的?

    前言 " 相信大家都遇到一种事务失效场景,那就是 Spring 自调用,就是在 Service 方法内,调用另一个加 @Transactional 注解的方法,发现事务失效,这时候你是怎么解 ...

  6. 怎么用feign远程调用别人的接口_spring cloud-openFeign声明式远程调用

    spring cloud-openFeign声明式远程调用 1.概述1.1.是什么Feign是一个声明式的Web服务客户端,让编写Web服务客户端变得非常容易,只需创建一个接口并在接口上申明注解Git ...

  7. 接口方法上的注解无法被@Aspect声明的切面拦截的原因分析

    转载自  接口方法上的注解无法被@Aspect声明的切面拦截的原因分析 前言 在Spring中使用MyBatis的Mapper接口自动生成时,用一个自定义的注解标记在Mapper接口的方法中,再利用@ ...

  8. cacheable更新_Spring之缓存注解@Cacheable

    从3.1开始,Spring引入了对Cache的支持.其使用方法和原理都类似于Spring对事务管理的支持.Spring Cache是作用在方法上的,其核心思想是这样的:当我们在调用一个缓存方法时会把该 ...

  9. 记一次API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析

    API 接口定义 添加 @ApiOperation 注解触发中间件 bug 问题分析 背景 我有一个服务 A ,写了一个接口定义如下: @RequestMapping({"/config/c ...

最新文章

  1. Web前端工程师应该懂的的知识点——HTML/CSS
  2. Spring Cloud Gateway重试机制
  3. 数据结构实验之图论五:从起始点到目标点的最短步数(BFS)
  4. (1) 漂亮的日期控件
  5. Linux安装软件包
  6. 数据集哪些特征有多大的null列表
  7. php组装json数据包,php封装json通信接口详解及实例
  8. Access is denied
  9. 1177: 按要求排序(指针专题)_数据结构 8 基础排序算法详解、快速排序的实现、了解分治法...
  10. 《卷积神经网络》学习笔记
  11. Ubuntu 12.04安装及配置vsftp步骤
  12. 【转】ASP.NET Web应用程序写EventLog出错的解决方案
  13. 笨方法学Python3 习题6
  14. http请求下载文件
  15. 全国青少年软件编程等级考试内容,知识点思维导图(Scratch编程三级)
  16. 一文讲透高速缓存原理
  17. 外贸常用术语_外贸跟单常用术语
  18. 为什么程序员容易猝死
  19. 国标GB28181安防摄像头如何通过视频流媒体服务器建设阳光考场?
  20. 通达云OA2015版及钉钉、微信办公集成产品正式发布

热门文章

  1. 机器学习(七)——规则化和模型选择
  2. es5如何实现promise_彻底理解Promise对象——用es5语法实现一个自己的Promise(上篇)...
  3. OCP笔记部分整理-学习参考
  4. syslog-ng 配置说明
  5. mac系统 PDO连接数据库报错处理
  6. 基于Ameoba实现mysql读写分离
  7. mysqlreport查看mysql性能
  8. 陶哲轩实分析定义8.5.5的一个注记
  9. 如何做好工程监理控制工作?
  10. 一步步教你前端vue项目开发中如何解决跨域问题