@Transactianal注解有一些属性,见Spring-Framework-Reference Table17.3 Transactional-settings

@Transactional(propagation=Propagation.REQUIRED) //控制事务传播。默认是Propagation.REQUIRED
@Transactional(isolation=Isolation.DEFAULT) //控制事务隔离级别。默认跟数据库的默认隔离级别相同
@Transactional(readOnly=false) //控制事务可读写还是只可读。默认可读写
@Transactional(timeout=30) //控制事务的超时时间,单位秒。默认跟数据库的事务控制系统相同,又说是30秒
@Transactional(rollbackFor=RuntimeException.class) //控制事务遇到哪些异常才会回滚。默认是RuntimeException
@Transactional(rollbackForClassName=RuntimeException) //同上
@Transactional(noRollbackFor=NullPointerException.class) //控制事务遇到哪些异常不会回滚。默认遇到非RuntimeException不会回滚
@Transactional(noRollbackForClassName=NullPointerException)//同上
回到顶部
控制事务传播----propagation属性
事务的传播是指:
A.f1()有事务X
B.f2()有事务Y
当A.f1()调用B.f2()的时候,B.f2()中的代码执行哪个事务

该属性可能的值有(以下属性值加在B.f2()上来理解):

Propagation.NEVER:
B.f2()不能在任何事务下执行,如果A.f1()调用它,那么抛异常。绝不接受,硬给就拼命

Propagation.NOT_SUPPORTED:
B.f2()不需要在事务中执行。如果被需要事务X的A.f1()调用,那么事务X被挂起,B.f2()执行完毕X才恢复。不接受,硬给也不收

Propagation.REQUIRES_NEW:
如果A.f1()调用B.f2(),那么事务X被挂起,重新创建一个事务Y,B.f2()在事务Y中执行,Y执行完毕再继续X事务。接受,给的不收,用自己的

Propagation.SUPPORTS:
如果B.f2()被A.f1()调用,那么执行X事务;如果被没有事务的方法调用,那么就在没有事务的环境下执行。接受,给就收下,不给也不要

Propagation.REQUIRED:
如果A.f1()调用B.f2(),那么B.f2()在事务X中执行;如果B.f2()没有被调用,那就执行自己的事务Y。接受,给就收下,不给就用自己的

Propagation.MANDATORY:
B.f2()不能开启自己的事务,只能被开启了事务的A.f1()调用,如果被没有开启事务其他的方法调用,则抛异常。自己没有,给,必须给,不给就哭

Propagation.NESTED:
看不懂

回到顶部
控制事务隔离级别----属性isolation
事务隔离级别是数据库的概念,在多个事务对一批记录进行操作的时候,可能出现各种冲突的情况

该属性的可能值有:
Isolation.READ_UNCOMMITED
读未提交
可以读到其他事务未提交的数据。导致脏读(dirty read)

Isolation.READ_COMMITED
读已提交。这是很多数据库的默认隔离级别,但不是MySQL的。
不能读到其他事务未提交的数据,只能读到已提交的数据。解决了脏读,可导致重读和幻读
重读:在预读之后,commit之前,其他事务更新了数据,导致两次读到的数据不相同
幻读:在预读之后,commit之前,其他事务插入数据,导致两次读到的数据条数不相同

Isolation.REPEATABLE_READ
可重复读。这是MySQL的默认事务隔离级别
解决了脏读,重读,但依然存在幻读问题。

Isolation.SERIALIZABLE
可串行化
最高的事务隔离级别。解决了脏读、重读、幻读
但导致大量的超时和锁竞争。

Isolation.DEFAULT
数据库默认隔离级别

回到顶部
只可读/可读写
有的事务不涉及到写操作,就可以将其指定为只读事务:@Transactional(readOnly=true),这样可以节约一些资源开销
默认是可读写

回到顶部
遇到哪些异常会回滚和不回滚----rollbackFor和noRollbackFor属性
默认在遇到RuntimeException的时候会回滚。

如果要指定在遇到checkedException的时候也回滚
@Transactional(rollbackFor={IOException.class,FileNoteFoundException})
多个异常类型,用数组

如果要指定遇到几个RuntimeException的时候不回滚
@Transactional(noRollbackFor={NullPointerException.class,IndexOutOfBoundsException.class})
多个异常类型,用数组
测试的时候,抛出了Transaction rolled back because it has been marked as rollback-only,暂不知道原因

其他:
@Transaction应当添加在具体的实现类而不是接口上

@Transactional注解的几个参数--事务传播控制--事务隔离级别--异常与回滚相关推荐

  1. 0046 @Transactional注解的几个参数--事务传播控制--事务隔离级别--异常与回滚

    0046 @Transactional注解的几个参数--事务传播控制--事务隔离级别--异常与回滚 参考文章: (1)0046 @Transactional注解的几个参数--事务传播控制--事务隔离级 ...

  2. spring 事务隔离级别和传播行为_Java工程师面试1000题146-Spring数据库事务传播属性和隔离级别...

    146.简介一下Spring支持的数据库事务传播属性和隔离级别 介绍Spring所支持的事务和传播属性之前,我们先了解一下SpringBean的作用域,与此题无关,仅做一下简单记录. 在Spring中 ...

  3. mysql事务传播属性_Spring事务传播属性和隔离级别详细介绍

    1 事务的传播属性(Propagation) 1) REQUIRED ,这个是默认的属性 Support a current transaction, create a new one if none ...

  4. Spring事务传播属性和隔离级别

    Spring事务传播属性和隔离级别 一.Spring事务传播属性(Propagation): 1) REQUIRED(默认属性) 如果存在一个事务,则支持当前事务.如果没有事务则开启一个新的事务.  ...

  5. Spring事务传播性与隔离级别

    为什么80%的码农都做不了架构师?>>>    事务是逻辑处理原子性的保证手段,通过使用事务控制,可以极大的避免出现逻辑处理失败导致的脏数据等问题. 事务最重要的两个特性,是事务的传 ...

  6. 浅析Spring事务传播行为和隔离级别

    7个传播行为.4个隔离级别. Spring事务的传播行为和隔离级别[transaction behaviorand isolatedlevel] Spring中事务的定义: Propagation(k ...

  7. 说说Spring事务传播行为和隔离级别

    分析&回答 Spring事务的4个隔离级别 Isolation Level(事务隔离等级): Serializable:最严格的级别,事务串行执行,资源消耗最大: REPEATABLE REA ...

  8. Spring事务传播机制和隔离级别

    Spring有5种隔离级别,7种传播行为.这是面试常问的内容,也是代码中经常碰到的知识点.这些知识枯燥而且乏味,其中有些非常的绕.如果栽在这上面,就实在是太可惜了. @Transactional(is ...

  9. Spring的隔离级别事务传播属性数据库隔离级别之间的联系

    一.Spring五大事务隔离级别 Spring事务隔离级别比数据库事务隔离级别多一个default 在进行配置的时候,如果数据库和spring代码中的隔离级别不同,那么以spring的配置为主.1) ...

最新文章

  1. javascript”面向对象编程”- 1万物皆对象
  2. zookeeper C API
  3. 利用union判断系统的大小端
  4. matlab中“存储空间不足,无法处理此命令”
  5. 转://Linux Multipath多路径配置与使用案例
  6. 数据库系统原理设计题和综合体
  7. 架构运维篇(二):Centos7/Linux安装部署Tomcat环境
  8. Snagit 2020 for mac(最好用的屏幕截图软件)
  9. 视频教程-区块链技术与应用视频课程【基础篇】-区块链
  10. 金蝶未注册服务器win10,金蝶WIN10下异常问题解决方法
  11. android 画尖角气泡,Android 实现气泡布局/弹窗,可控制气泡尖角方向及偏移量
  12. 计算机创造奇迹的英语作文,创造奇迹英语作文Creating Miracle
  13. 英语六级试卷软件测试,背单词软件_2017年12月英语六级考试真题测试(11)含答案_沪江英语...
  14. 面试了10几家软件公司测试岗位,做的面试题大盘点,重点大合集
  15. 常用的9种数据分析方法
  16. Windows 10下载安装openjdk及环境变量配置(以openjdk 8为例)
  17. 拿到JS异步函数返回值的几种方式
  18. Kafka源码阅读-Controller(二)管理brokers
  19. tp-link wr 841n 300m 局域网限速的研究
  20. wikipedia 维基百科架构

热门文章

  1. Java前端Rsa公钥加密,后端Rsa私钥解密(支持字符和中文)
  2. Spark 广播变量和累加器
  3. HDU 2819 Swap(二分图匹配)
  4. 用R和BioConductor进行基因芯片数据分析(四):芯片内归一化
  5. sqlserver备份后无法还原的解决方法
  6. 权限数据库设计(Sql Server)
  7. android进程间传递文件描述符原理
  8. Android Binder 分析——匿名共享内存(好文)
  9. 一张图看尽 Linux 内核运行原理
  10. 树莓派之安装docker