关于@Transactional的使用
1.来源
@Transactional是spring-tx-5.2.12.RELEASE.jar下的一个注解,用户定义事务和处理事务
2. 事务
事务可以理解为一系列不可分割的操作。事务具有ACID的特性。
3.做什么
根据事务的特性,所以当我们需要整体化的处理某一些操作时,可以将这些操作封装到同一个事务中进行处理,保证数据的一致性。举个简单的例子:你去菜市场买苹果,对你来说,你需要做以下的操作:1.给老板钱 2.拿走苹果。 这两件事应该是要么同时发生,要么同时不发生的。出现你给老板钱了,没拿苹果或者是你没给钱,直接拿走了苹果,这些都是不合理的。所以为了保证这两件事的同步发生,在程序中可以放在同一个事务中进行处理。
4.定义事务
在sprintboot中,可以使用@Transactional注解来定义事务。@Transactional可以注解在service类上,也可以注解到各个方法上。一般推荐注解到方法。@Transactional放在service类上时,则service中的每个方法都会被定义成事务,按照事务的规则进行处理。@Transactional放在方法上,则只是注解的方法是事务方法。
4.1 常用属性
rollbackFor:指定事务执行过程中,发生了什么操作,会执行回滚。通常会指定一个异常类的class。
5.回滚处理
什么是回滚?回滚就是事务执行遇到异常时,会将数据库恢复到事务执行前的状态的过程。接着上面的例子:你买苹果,给了老板钱,然后拿着苹果准备回家了。老板接到钱一看,不行啊,你这是个假币啊。然后你就只能把苹果放回去,然后拿着你的假币回家了(老板不报警的话。。使用假币违法!)。这就是回滚。
5.1 回滚的定义
一般情况下,会使用rollbackFor来指定回滚的触发条件。比如,你设置@Transactional(rollbackFor = Exception.class),那么下面的方法执行过程中,如果抛出了Exception,则会进行回滚。如果你设置为@Transactional(rollbackFor = RunnableTimeException.class),则抛出RunnableTimeException时会进行回滚,抛出其他的异常则不会回滚。所以你可以使用rollbackFor来定义你事务回滚的触发条件。值得一提的是,@Transactional设置在service类上时,是可以不指定rollbackFor的,他默认的值是RunnableTimeException.class。
对了,有一种情况需要特殊注意下。你在Service种定义了A() B()两个方法,同时A没有启用Transactional,在B方法上启用了Transactional。同时A方法的执行过程中,调用了B方法。这种情况下,controller直接调用B方法的时候,发生异常是会执行回滚的,而如果是controller调用了A方法,此时B方法同样是抛出了异常,这种情况下,是不会发生回滚的。如果反过来,A启用了Transactional,B方法没有启用Transactional,则Controller调用A,A调用了B,B在执行过程种抛出了异常,这时候,事务会进行回滚。
6.其他
嗯 其他的还没想到。
关于@Transactional的使用相关推荐
- @Transactional注解最容易忽视的三个失效场景!
@Transactional注解在以下场景中使用,是会失效的,切记! 1.非public方法 spring对注解事务的方法进行校验,修饰符是不是public,不是 public则不会获取@Transa ...
- 3 种场景 @Transactional 失效的解决方法
以下文章来源方志朋的博客,回复"666"获面试宝典 来源 | blog.csdn.net/qq_20597727/article/details/84900994 Transact ...
- Spring官方都推荐使用的@Transactional事务,为啥我不建议使用!
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 事务管理在系统开发中是不可缺少的一部分,Spring提供了 ...
- @aspect注解类不生效_springboot:@Transactional注解 VS @Service注解
1. Transactional注解与Service/Component注解冲突? 之前遇到一个神奇的事情--用Transactional注解的方法,数据处理了一半,后面的数据处理抛出异常后,没有回滚 ...
- Spring Transactional还能导致生产事故?
在Spring中进行事务管理非常简单,只需要在方法上加上注解@Transactional,Spring就可以自动帮我们进行事务的开启.提交.回滚操作.甚至很多人心里已经将Spring事务与@Trans ...
- 一口气说出 6 种 @Transactional 注解的失效场景
一.事务 事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种. 编程式事务:是指在代码中手动的管理事务的提交.回滚等操作,代码侵入性比较强, ...
- Spring_Spring@Transactional
Spring事务的传播行为 在service类前加上@Transactional,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务. Spring默认情况下会对运行期例 ...
- Spring 事务之@Transactional
在业务代码中,有如下两种情况,比如: throw new RuntimeException("xxxxxxxxxxxx"); 事务回滚 throw new Exception(&q ...
- spring@Transactional注解事务不回滚不起作用无效的问题处理
这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚.后来终于找到了原因. 如果你也出现了这种情况,可以从下面开始排查. 一.特性 先来了解一下@Transactio ...
- SpringBoot之事务管理Transactional
以前学ssh ssm都有事务管理service层通过applicationContext.xml配置,所有service方法都加上事务操作: 用来保证一致性,即service方法里的多个dao操作,要 ...
最新文章
- 地铁闸门会夹伤人吗_西安地铁率先推出分类垃圾箱 四种类型你会放吗?
- MYSQL-使用mysqldump创建数据库快照
- java编程50实例_java编程实例大全及详解谜底(50例).doc
- python实训项目-黑马程序员上海校区Python21期Django项目实训
- 【Keras】基于SegNet和U-Net的遥感图像语义分割
- ORACLE表空间管理维护
- 解决 E: Unable to correct problems, you have held broken packages. 问题
- 试验ConcurrentHashmap
- css段落文字(中英文混杂)实现两端对齐
- 如何获取codeforces的完整数据
- 浙江独立学院计算机专业排名2015,2014-2015年中国独立学院排名
- Mysql Linux安装详细步骤
- CSS3特效----制作3D旋转导航
- OPC client安装教程
- Python CV2图像鼠标选择任意区域截图
- java通过poi转换ppt/pptx内容,输出为PNG图片。
- 王家林Spark视频
- 网页设计理论知识(色彩搭配)
- 短视频SDK用于旅游行业
- linux meld 编译,Linux 系统上的可视化比较与合并工具 Meld