开发者社区> dawnzhang> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Spring中的@Transactional(rollbackFor = Exception.class)属性详解

简介: 序言 今天我在写代码的时候,看到了。一个注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,这个注解的用法;   异常 如下图所示,我们都知道Exception分为运行时异常RuntimeException和非运行时异常 error是一定会回滚的 如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。
+关注继续查看

序言

今天我在写代码的时候,看到了。一个注解@Transactional(rollbackFor = Exception.class),今天就和大家分享一下,这个注解的用法;

 

异常

如下图所示,我们都知道Exception分为运行时异常RuntimeException和非运行时异常

error是一定会回滚的

如果不对运行时异常进行处理,那么出现运行时异常之后,要么是线程中止,要么是主程序终止。 
如果不想终止,则必须捕获所有的运行时异常,决不让这个处理线程退出。队列里面出现异常数据了,正常的处理应该是把异常数据舍弃,然后记录日志。不应该由于异常数据而影响下面对正常数据的处理。


非运行时异常是RuntimeException以外的异常,类型上都属于Exception类及其子类。如IOException、SQLException等以及用户自定义的Exception异常。对于这种异常,JAVA编译器强制要求我们必需对出现的这些异常进行catch并处理,否则程序就不能编译通过。所以,面对这种异常不管我们是否愿意,只能自己去写一大堆catch块去处理可能的异常。

 

事务管理方式  

事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性。

spring支持编程式事务管理和声明式事务管理两种方式。

   编程式事务管理使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

  声明式事务管理建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。

  声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解。显然基于注解的方式更简单易用,更清爽。

 

使用说明

当作用于类上时,该类的所有 public 方法将都具有该类型的事务属性,同时,我们也可以在方法级别使用该标注来覆盖类级别的定义。

在项目中,@Transactional(rollbackFor=Exception.class),如果类加了这个注解,那么这个类里面的方法抛出异常,就会回滚,数据库里面的数据也会回滚。

在@Transactional注解中如果不配置rollbackFor属性,那么事物只会在遇到RuntimeException的时候才会回滚,加上rollbackFor=Exception.class,可以让事物在遇到非运行时异常时也回滚

 

@Transactional注解的全部属性详解

@Transactional属性

  属性 类型 描述 value String 可选的限定描述符,指定使用的事务管理器 propagation enum: Propagation 可选的事务传播行为设置 isolation enum: Isolation 可选的事务隔离级别设置 readOnly boolean 读写或只读事务,默认读写 timeout int (in seconds granularity) 事务超时时间设置 rollbackFor Class对象数组,必须继承自Throwable 导致事务回滚的异常类数组 rollbackForClassName 类名数组,必须继承自Throwable 导致事务回滚的异常类名字数组 noRollbackFor Class对象数组,必须继承自Throwable 不会导致事务回滚的异常类数组 noRollbackForClassName 类名数组,必须继承自Throwable 不会导致事务回滚的异常类名字数组

 

 

在最后附上,另一位大佬的详细见解

spring的@Transactional注解详细用法

 

小舟从此逝,江海寄余生。 --狐狸

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Spring——Spring中的事务、使用注解(@Transactional)控制事务、使用AspectJ框架控制事务 (下)
Spring——Spring中的事务、使用注解(@Transactional)控制事务、使用AspectJ框架控制事务 (下)
34 0
Springboot 快速了解 事务回滚@Transactional
Springboot 快速了解 事务回滚@Transactional
22 0
【Spring基础系列4】注解@Transactional(一)
前面已经讲解了IOC的基础知识,以及Spring常用的注解,这篇文章是对上一篇文章《【Spring基础系列3】Spring常用的注解》的补充,由于这个注解需要讲述的内容比较多,一方面该注解非常重要,另一方面非常容易入坑,所以这个注解的内容,就单独放到这篇文章来讲。
36 0
Spring @Transactional 注解事务
Spring @Transactional 注解事务
38 0
为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?
为什么阿里规定需要在事务注解@Transactional中指定rollbackFor?
39 0
Spring之Transaction
什么是事务 事务是一系列操作组成的工作单元,该工作单元具有不可分割性,一损俱损。满足ACID(原子性,一致性,隔离性,持久性) 事务按分布式划分可以分为本地事务,和分布式事务 分别由JDBC事务和JTA事务与其对应。
6998 0
spring事物配置,声明式事务管理和基于@Transactional注解的使用
spring事物配置,声明式事务管理和基于@Transactional注解的使用 事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一致性。 spring支持编程式事务管理和声明式事务管理两种方式。
1594 0
SharePoint 2016 配置向导报错 - The 'ListInternal' attribute is not allowed
前言   配置SharePoint 2016的配置向导中,第三步创建配置数据库报错,然后百度、谷歌了一下,都没有解决,自己看日志搞定,也许会有人遇到类似问题,分享一下。   1、配置向导的错误截图,如下图:   2、根据上图找到错误日志,日志里的详细信息,如下: Failed to create the configuration database.
1117 0
Spring配置中transactionAttributes的使用方法和作用
最近碰到这个问题,在使用spring提供的JpaTemplate进行查询时,如果数据量超过100 条,查询效率就会明显降低。
659 0
+关注
dawnzhang
技术山下,不羁的登山者
25
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载