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的使用相关推荐

  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. MYSQL-使用mysqldump创建数据库快照
  3. java编程50实例_java编程实例大全及详解谜底(50例).doc
  4. python实训项目-黑马程序员上海校区Python21期Django项目实训
  5. 【Keras】基于SegNet和U-Net的遥感图像语义分割
  6. ORACLE表空间管理维护
  7. 解决 E: Unable to correct problems, you have held broken packages. 问题
  8. 试验ConcurrentHashmap
  9. css段落文字(中英文混杂)实现两端对齐
  10. 如何获取codeforces的完整数据
  11. 浙江独立学院计算机专业排名2015,2014-2015年中国独立学院排名
  12. Mysql Linux安装详细步骤
  13. CSS3特效----制作3D旋转导航
  14. OPC client安装教程
  15. Python CV2图像鼠标选择任意区域截图
  16. java通过poi转换ppt/pptx内容,输出为PNG图片。
  17. 王家林Spark视频
  18. 网页设计理论知识(色彩搭配)
  19. 短视频SDK用于旅游行业
  20. linux meld 编译,Linux 系统上的可视化比较与合并工具 Meld

热门文章

  1. 中国科技大学网络视频课程软件设计模式(自主模式)
  2. 电脑开机输完密码就黑屏的解决历程
  3. SAP FICO 关于资产的详细解析
  4. 6-3 BMI计算(类与对象) (10分)
  5. 手动杀掉AUTORUN病毒.
  6. 如何查找APP漏洞并渗透测试 解决网站被黑客攻击
  7. linux sparse
  8. c++单精度和双精度的运算例子(计算机占位存储)
  9. 使用matlab分析一段声音信号的均方根
  10. 理解矩阵和特征向量的本质