Spring定义了七种传播行为:

一、开启事物管理

//import org.springframework.transaction.annotation.EnableTransactionManagement; `@SpringBootApplication

@EnableTransactionManagement //显示开启事物管理,springboot默认已经开启事物管理,可不用显示的注解 public class Application extends SpringBootServletInitializer {

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {return application.sources(Application.class);
}public static void main(String[] args) {SpringApplication.run(Application.class, args);
}

}` 二、配置事物

在需要事物的类或方法上使用@Transactional(import org.springframework.transaction.annotation.Transactional)

1、isolation 隔离级别(Springboot默认值为Isolation.DEFAULT)

用法: `~ @Transactional(isolation=Isolation.DEFAULT) public void test() {

} ~枚举值(org.springframework.transaction.annotation):public enum Isolation { DEFAULT(TransactionDefinition.ISOLATION_DEFAULT), READ_UNCOMMITTED(TransactionDefinition.ISOLATION_READ_UNCOMMITTED), READ_COMMITTED(TransactionDefinition.ISOLATION_READ_COMMITTED), REPEATABLE_READ(TransactionDefinition.ISOLATION_REPEATABLE_READ), SERIALIZABLE(TransactionDefinition.ISOLATION_SERIALIZABLE); }DEFAULT:默认值,表示使用底层数据库的默认隔离级别。大部分数据库为READ_COMMITTED(MySql默认隔离级别为REPEATABLE)READ_UNCOMMITTED:该隔离级别表示一个事务可以读取另一个事务修改但还没有提交的数据。该级别不能防止脏读和不可重复读,因此很少使用该隔离级别。READ_COMMITTED:该隔离级别表示一个事务只能读取另一个事务已经提交的数据。该级别可以防止脏读,这也是大多数情况下的推荐值。REPEATABLE_READ:该隔离级别表示一个事务在整个过程中可以多次重复执行某个查询,并且每次返回的记录都相同。即使在多次查询之间有新增的数据满足该查询,这些新增的记录也会被忽略。该级别可以防止脏读和不可重复读。SERIALIZABLE:所有的事务依次逐个执行,这样事务之间就完全不可能产生干扰,也就是说,该级别可以防止脏读、不可重复读以及幻读。但是这将严重影响程序的性能。通常情况下也不会用到该级别。  **通过使用isolation属性设置,例如:@Transactional(isolation = Isolation.DEFAULT)/2.`**

2、事物传播行为 propagation(springboot默认值为Propagation.REQUIRED)

用法: `~ @Transactional(propagation=Propagation.REQUIRED) public void test() {

} ~` 枚举值(org.springframework.transaction.annotation.Propagation): public enum Propagation {

REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED),SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS),MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY),REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW),NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED),NEVER(TransactionDefinition.PROPAGATION_NEVER),NESTED(TransactionDefinition.PROPAGATION_NESTED);

} REQUIRED :如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。 
SUPPORTS :如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。 
MANDATORY :如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。 
REQUIRES_NEW :创建一个新的事务,如果当前存在事务,则把当前事务挂起。 
NOT_SUPPORTED :以非事务方式运行,如果当前存在事务,则把当前事务挂起。 
NEVER :以非事务方式运行,如果当前存在事务,则抛出异常。 
NESTED :如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于 REQUIRED 。 
指定方法:通过使用 propagation 属性设置,例如:@Transactional(propagation = Propagation.REQUIRED)

3、readOnly=true只读,不能更新,删除 ~~~ @Transactional(readOnly=true) ~~~ 三、常见坑点

1、遇到异常检测不回滚,原因:默认RuntimeException级别才回滚,如果是Eexception级别的异常需要手动添加. ~~~ @Transactional(rollbackFor=Exception.class) ~~~ 2、捕捉异常后事物不生效,原因:捕捉处理了异常导致框架无法感知异常,自然就无法回滚了。 @Transactional(rollbackFor=Exception.class) public void test() { try { //业务代码 } catch (Exception e) { // TODO: handle exception }    //主动捕捉异常导致框架无法捕获,从而导致事物失效 } 建议:若非实际业务要求,则在业务层统一抛出异常,然后在控制层统一处理

上面的这些面试题都整理成了PDF文档,希望能帮助到你面试前的复习并找到一个好的工作,相对来说也节省了你在网上搜索资料的时间来学习!!!

附欢迎关注我的公种号:it资源之家 ,扫描下面二维码即可领取更多一线大厂Java面试题资料!

最后

欢迎大家评论区一起交流,相互提升;整理资料不易,如果喜欢文章记得点个赞哈,感谢大家支持!!!

SpringBoot事务隔离等级和传播行为的那些事儿相关推荐

  1. spring事务传播行为与事务隔离等级

    propagation属性的传播行为: REQUIRED:指定当前方法必需在事务环境中运行,如果当前有事务环境就加入当前正在执行的事务环境,如果当前没有事务,就新建一个事务.这是默认值.  SUPPO ...

  2. Java提升篇-事务隔离级别和传播机制

    转载自 Java提升篇-事务隔离级别和传播机制 问题的提出 为了保证并发操作数据的正确性及一致性,SQL规范于1992年提出了数据库事务隔离级别. 事务隔离级别分类 事务隔离级别由低往高可分为以下几类 ...

  3. 【事务隔离级别和传播机制】

    事务隔离级别和传播机制是关于事务的两个重要概念,下面分别进行介绍: 事务隔离级别: 在数据库中,事务隔离级别是指多个事务之间相互隔离的程度.常见的事务隔离级别有四个,从低到高依次是: 读未提交(Rea ...

  4. 事务隔离级别和传播行为

    事务隔离级别和传播行为 再次之前自认为我对数据库事务和隔离级别很熟悉了,至少以前整理过,看过网上很多文章,有些带有命令行操作的印象挺深,但是事务传播(包块调用外部系统服务).分布式锁.mybatis一 ...

  5. spring 事务隔离级别和传播行为_Spring事务传播性与隔离性实战

    一.事务传播性 1.1 什么是事务的传播性 事务的传播性一般在事务嵌套时候使用,比如在事务A里面调用了另外一个使用事务的方法,那么这俩个事务是各自作为独立的事务执行提交,还是内层的事务合并到外层的事务 ...

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

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

  7. 事务隔离级别和传播行为_Spring五个事务隔离级别和七个事务传播行为

    Isolation 属性一共支持五种事务修改,具体介绍如下: l DEFAULT 使用设置的防护级别 ( 默认 ) ,由 DBA 默认的设定来决定隔离级别 . l READ_UNCOMMITTED 会 ...

  8. 事务隔离级别和传播行为_.spring的事务有几种方式?spring事务的隔离级别和传播行为是什么?...

    展开全部 Spring提供了许多内置事务管理器实现,常用的有: DataSourceTransactionManager(JDBC局部事务):62616964757a686964616fe59b9ee ...

  9. Spring 的事务隔离级别和传播特性

    2019独角兽企业重金招聘Python工程师标准>>> 今天被人问了一个Oracle 关于事务的简单问题,结果自己一时间竟然说错了  死了死了的,只能说自己没有用心去理解这个问题. ...

最新文章

  1. matlab7.1(ERROR STARTING DESKTOP)解决
  2. linux添加硬盘分区设置柱面,linux 下添加新硬盘设备和硬盘分区格式化挂载使用磁盘配额限制...
  3. 阿里巴巴对Java编程【单元测试】的规约
  4. 使用AspectJ审计Spring MVC Webapp。 第1部分
  5. a查询计算机主机路由表信息,计算机网络主机A向其他主机B进行通信的流程
  6. 这才是真正适合小白的教程:Python有什么用?数据化运营怎么做?
  7. idea中Terminal输入命令git log后如何退出
  8. python restful风格_总结python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
  9. WiFi 抓包工具使用SOP(OmniPeek)
  10. Linux苹果工具,Projectsandcastle:一款针对iPhone的AndroidLinux支持工具
  11. dwg如何转换成pdf?
  12. 学生HTML个人网页作业作品下载 个人主页博客网页设计制作 大学生个人网站作业模板 简单个人网页制作
  13. RabbitMQ相关图形,dljd
  14. methylKit:差异甲基化分析
  15. 金仓数据库KingbaseES本地化支持(4. 排序规则)
  16. 如何在Python中用集合实现随机的1~100的20个数字
  17. K8s安装 遇到错误:docker-ce conflicts with 2:docker-1.13.1-208.git7d71120.el7_9.x86_64
  18. 量子计算机:决胜21世纪的利器
  19. MES系统——工艺管理篇
  20. 简介:Virtual Kubelet

热门文章

  1. 图解DFT,DTFT,DFS,FFT,FT,FS区别与联系
  2. [VSCode] VSCode使用C++运行HelloWorld
  3. ai语音机器人接听自动外呼配置
  4. python ansys workbench联动_【干货】经典ANSYS 与 Workbench如何实现联合仿真,相互切换操作。...
  5. 江湖武侠浪迹天涯网站404页面源码
  6. 达梦数据查询编码_从数据库到全栈数据解决方案,达梦不走捷径
  7. 疫情期间,天天对着你“开枪”的额温枪,你知道它的工作原理吗?
  8. 代码随想录——回溯算法
  9. github告诉我构建失败,然后呢?
  10. php smarty模板配置,封装Smarty模板的配置方法