Spring的Transactional注解主要有以下功能:

1. 标注在方法上,如果该方法掉了多个别的方法,每个方法都有对数据库做数据更改,如果这些更改需要保持一致性,这时就可以用到这个注解。

2. 用这个注解一个前提是这些方法都用的是本地数据库连接,也就是说只对于本地数据库连接(事务)有效,对于分布式事务,这个注解是没办法完成远程事务的回滚和提交的。

3. 这个注解的isolation属性,对应的是数据库的四种隔离级别,比如read uncommitted, read committed, repeatable read, serializable。对于Mysql, 默认是repeatable read,而SqlServer和Oracle数据库,默认是read committed。当修改该值时,比如改成read uncommitted,那在该数据库连接中,就可以看到别人未提交的数据。我们也可以在一些数据库客户端可视化工具中,比如SqlYog中修改连接的隔离级别,这样就可以查看到未提交的数据。级别越高,要求越严格,并发性越差。

4. 这个注解的propagation属性,我们重点关注两个,一个是REQUIRED, 另外一个是REQUIRES_NEW。比如有这样一个方法:

@Transactional()
public void methodA(){methodB();methodC();xxxxx;
}@Transactional()
public void methodB(){xxxx;
}@Transactional(propagation = REQUIRES_NEW)
public void methodC(){xxxx;
}

默认propagation属性值是REQUIRED,以我们这段伪代码为例,methodA和methodB默认都是REQUIRED,这样当A方法或者B方法出错抛出异常时,A和B都会回滚,因为公用的是同一个事务。而C方法由于是开启了一个新事务,所以C与A/B互不影响。

5. Transactional注解回滚的条件是有异常才会回滚。也就是以来异常机制。如果你想让事务回滚,你的代码要么自动抛异常,要么手动抛一个异常。实际上Spring框架会对标注了这个注解的类用代理的方式生成一个新的类,从而帮助你完成回滚的代码,回滚的代码是放在了catch{}块中(猜测,没有实际验证过)。

6. 如果是Springboot程序,那上边的这段伪代码,即使C方法设置的是REQUIRES_NEW,也不会生效,C方法也会跟A, B公用一个事务。具体解决办法,可以参考网上文章。

Spring的Transactional注解相关推荐

  1. Spring的@Transactional注解踩坑

    @Transactional介绍 Spring为开发人员提供了声明式事务的使用方式,即在方法上标记@Transactional注解来开启事务.大家在日常的开发中很多业务代码对数据进行操作的时候一定是希 ...

  2. spring的@Transactional注解详细用法

    概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型 ...

  3. SSM框架中使用Spring的@Transactional注解进行事务管理

    一 介绍 在企业级应用中,保护数据的完整性是非常重要的一件事.因此不管应用的性能是多么的高.界面是多么的好看,如果在转账的过程中出现了意外导致用户的账号金额发生错误,那么这样的应用程序也是不可接受的 ...

  4. SpringCloud学习笔记009---杂七杂八003:spring的@Transactional注解详细用法

    概述 事务管理对于企业应用来说是至关重要的,即使出现异常情况,它也可以保证数据的一致性. Spring Framework对事务管理提供了一致的抽象,其特点如下: 为不同的事务API提供一致的编程模型 ...

  5. Spring Boot Transactional注解源码阅读笔记(二)

      在源码笔记(一)中,我们留下了几个问题: Spring Boot是怎么扫描到我们的bean里面有 Transactional 这个注解,并且把 InfrastructureAdvisorAutoP ...

  6. 聊一聊Spring中@Transactional注解及其失效的七种场景

    文章目录 一.事务(基于AOP) 二.@Transactional介绍 三.@Transactional失效场景 说明:当我准备写我知道的那几个场景时,我发现有人比我写的更好,关键是好得多,于是我就用 ...

  7. Spring:@Transactional 注解使用讲解

    文章目录 1.美图 2. 源码 3.@Transactional 注解的属性信息 4.事务传播机制 5.注意 6. 案例 6.1 基于tx标签的声明式事物 6.2 基于@Transactional注解 ...

  8. Spring学习总结(33)—— 用 Spring 的 @Transactional 注解控制事务有哪些不生效的场景?

    数据库引擎不支持事务 这里以 MySQL 为例,其 MyISAM 引擎是不支持事务操作的,InnoDB 才是支持事务的引擎,一般要支持事务都会使用 InnoDB.根据 MySQL 的官方文档: htt ...

  9. Spring提取@Transactional事务注解的源码解析

    声明:本文是自己在学习spring注解事务处理源代码时所留下的笔记: 难免有错误,敬请读者谅解!!! 1.事务注解标签 <tx:annotation-driven /> 2.tx 命名空间 ...

最新文章

  1. 推荐几款爬虫软件与无需编程的数据分析工具
  2. 好看的动态实时时间显示时钟HTML源码
  3. python的sleep_python的time.sleep()有多准确?
  4. 如何判断脚本执行成功
  5. php 检测密码,php 判断密码是否简单
  6. Java的新项目学成在线笔记-day7(一)
  7. Linux安全配置规范
  8. 微分方程计算机仿真国内外研究论文,微分方程数值解法毕业论文--开题报告.doc...
  9. 一个串口连接另外两个串口的设计
  10. c语言计算燃烧温度,f与c温度换算(温度f和c换算计算器)
  11. 波士顿大学 计算机专业,波士顿大学本科计算机专业课程设置是怎样的?
  12. 普通风景照如何调色,ps教程
  13. C语言串口通信R8T8,K60-串口通信
  14. 计算机网络机房自查报告,银行机房自查报告
  15. 视频H.263与H.264的比较
  16. TDengine在吉科软车辆监管中的应用实践
  17. 如何在互联网存量时代做电商?
  18. python自学,这几个网站就够了
  19. Mybatisplus 分页查询时,禁止自动统计总数
  20. Web前端学习html css(一)

热门文章

  1. LiveNVR监控流媒体Onvif/RTSP功能-RTSP/RTMP/HLS/HTTP-FLV视频文件流转成GB28181级联至海康宇视大华等第三方国标平台政务公安内网视频平台
  2. Oracle TO_CHAR函数格式化数字(以及小数点前0丢失问题)
  3. Matlab常用的输出命令disp、fprintf
  4. (P38-45)数据库系统下-数据库查询实现算法-两趟扫描算法
  5. 如何获取.JTL文件
  6. 期望,方差,协方差,相关系数性质大全
  7. OLTP和OLAP基础分析
  8. JAVA知识点总结第二周
  9. Java学习日志Day29_数据库的约束_备份和还原_三大设计范式_多表查询
  10. Arduino 无线继电器 蓝牙 4.0 BLE XBEE 24L01 4路遥控开关