@Transactional注解默认:

隔离级别:Connection.TRANSACTION_REPEATABLE_READ,可重复读的隔离级别,

传播机制:Propagation.REQUIRED,如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务

readOnly

首先要弄清楚如果一个接口中有多个查询,需要不需要加@Transactional ?如果不需要,会不会出现多个sql查询,数据不一致的情况?

    //关闭mybatis的二级缓存@Overridepublic User findUser() throws Exception {userMapper.findUser();return userMapper.findUser();}

如果在两次查询中,出现了数据更新,第二条查询会查询到最新的数据,这就造成了前后两个查询数据不一致的情况

    @Override@Transactionalpublic User findUser() throws Exception {userMapper.findUser();return userMapper.findUser();}

加上@Transactional之后:

其第二次查询会去mybatis的一级缓存中拿, 符合可重复读的隔离级别,保证了数据一致性,但是添加事务,就要写undo.log,写undo log就要消耗性能,如果不让它写undo log呢,则设置:read_only = true,是对性能的一种优化

timeout

当数据库的事务请求并发压力,有些事务请求的sql迟迟不能做出响应的处理,为了防止数据库出现了锁等待,或者死锁的情况,我们需要给相关业务方法添加事务超时

    @Override@Transactional(timeout = 2)public User findUser() throws Exception {userMapper.findUser();userMapper.updateUser();Thread.sleep(5000);return userMapper.findUser();}

rollbackFor

@Transactional默认只是对运行时异常进行捕捉,捕捉到了则进行回滚

    <update id="updateUser" >update user set username = 'aaa' where id = 1</update>
    @Override@Transactionalpublic User findUser() throws Exception {userMapper.findUser();userMapper.updateUser();if(true){throw new IOException("ssssss");}return userMapper.findUser();}

像IOException是比较普遍的异常,文件读写,都可能会发生

但是数据库里面的值被修改了:

所以需要添加这个@Transactional(rollbackFor = Exception.class),捕捉了Exception异常才会回滚

在方法中捕捉了异常,会事务失效,不会进行回滚

    @Override@Transactional(rollbackFor = Exception.class)public User findUser() throws Exception {userMapper.findUser();userMapper.updateUser();try {if(true){throw new IOException("ssssss");}}catch (Exception e){e.printStackTrace();}return userMapper.findUser();}

虽然程序报错了,但是异常被try catch,依然不会进行回滚,数据被修改了

@Transactional注解解析相关推荐

  1. Transactional注解原理解析

    什么是@Transactional? @Transactional是Spring这种用于处理事务的注解,基于拦截器进行commit或rollback 使用例子 下面举一个加了@Transactiona ...

  2. spring@Transactional注解事务不回滚不起作用无效的问题处理

    这几天在项目里面发现我使用@Transactional注解事务之后,抛了异常居然不回滚.后来终于找到了原因. 如果你也出现了这种情况,可以从下面开始排查. 一.特性 先来了解一下@Transactio ...

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

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

  4. @Transactional注解事务不回滚不起作用无效

    @Transactional注解事务不回滚不起作用无效 以下内容均来自http://blog.csdn.net/u011410529/article/details/54287307 转载 这几天在项 ...

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

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

  6. @Transactional注解详细使用

    目录 一.@Transactional 注解使用注意事项 二.Spring事务的传播规则 三.微服务开发案例 四.Spring 事务源码深度解析 一.@Transactional 注解使用注意事项 @ ...

  7. 【BUG】@Transactional注解在同类方法调用中不生效

    后台代码 今天做系统开发的时候,遇到了一个BUG:@Transactional注解在同类方法调用中不生效 代码如下: /*** @description: 快递100接口服务类* @date 2021 ...

  8. @Transactional注解最容易忽视的三个失效场景!

    @Transactional注解在以下场景中使用,是会失效的,切记! 1.非public方法 spring对注解事务的方法进行校验,修饰符是不是public,不是 public则不会获取@Transa ...

  9. @aspect注解类不生效_springboot:@Transactional注解 VS @Service注解

    1. Transactional注解与Service/Component注解冲突? 之前遇到一个神奇的事情--用Transactional注解的方法,数据处理了一半,后面的数据处理抛出异常后,没有回滚 ...

  10. 一口气说出 6 种 @Transactional 注解的失效场景

    一.事务 事务管理在系统开发中是不可缺少的一部分,Spring提供了很好事务管理机制,主要分为编程式事务和声明式事务两种. 编程式事务:是指在代码中手动的管理事务的提交.回滚等操作,代码侵入性比较强, ...

最新文章

  1. 【JavaSE】双向链表的实现与讲解
  2. 如何用cmd命令控制mysql数据库
  3. python pycurl_简单谈谈Python的pycurl模块_python
  4. linux下Eclipse+CDT开发环境配置与使用
  5. 锲而不舍 —— M 是怎样找工作的?(八)
  6. 知道坐标matlab三维作图,已知点坐标,要求根据坐标作出三维曲面图
  7. 《Linux命令行与shell脚本编程大全》第十八章 图形化桌面环境中的脚本编程
  8. python列表语法_python学习之列表语法
  9. 西门子S7-300PLC采用博途V14编程程序,附带博途WINCC上位机,项目内容甲醛生产线项目,模拟量处理,电机控制等
  10. (休息几天)读曼昆之微观经济学——供给需求和政府政策
  11. 使用python的sklearn包实现CCA(典型相关分析)
  12. linux终端快捷键(持续更新)
  13. 投票和排名系统C语言顺序表,电视大赛观众投票及排名系统C语言设计.docx
  14. 更改C盘用户目录下的用户名(亲测有效)
  15. 老主板怎么接机箱前面的USB和mic
  16. Linux期末考试必考内容,linux期末考试
  17. LeetCode第127题—单词接龙—Python实现
  18. 关于pycharm找不到已经安装的模块问题的解决方案module ImportError
  19. 2020年远程面试全攻略
  20. EM算法推断混合高斯模型参数

热门文章

  1. Tita 绩效宝:掌握绩效考核对话
  2. 100个在线生信小工具
  3. 【北京迅为】i.MX6ULL终结者虚拟机安装Ubuntu系统
  4. word2016 图片去底灰_Word2016中为图片去除背景的方法
  5. ps人物碎片化飞溅效果特效怎么做
  6. u盘插在服务器上显示加载失败,U盘加载失败怎么解决
  7. 无人机倾斜摄影技术应用(文末附作业指导书)
  8. 看看淘宝的工程师如何评论12306
  9. 微信公众号python_微信公共平台框架-python(支持多账号)
  10. java linux 消息队列_我的第一个Linux程序----利用消息队列来实现IPC