13518219792

建站动态

根据您的个性需求进行定制 先人一步 抢占小程序红利时代

继续卷!面试又问Spring 事务有几种传播行为和隔离级别?

面试又被问到了事务,来吧,要么卷起来,要么躺平。卷不动躺平会不会导致数据不一致?

成都创新互联公司成立于2013年,先为牟定等服务建站,牟定等地企业,进行企业商务咨询服务。为牟定企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。

事务概念

事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。

说简单点就是,要么所有执行success,不然就fail。它最终的目标:数据不会被破坏。即事务操作成功,数据的结果和业务期待的结果是一致的。

事务的属性

一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性

1:原子性(Atomicity):原子性要求事务作为一个不可分割的整体被执行,包含在其中的对数据库的操作要么全部被执行,要么都不执行(其中有一个操作失败,就全部失败)。

2:一致性(Consistency):一致性要求事务应确保数据库的状态从一个一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整性约束。

执行前数据间的一致性状态 === 执行后数据间的一致性状态

3:隔离性(Isolation):事务的隔离性要求多个事务并发执行时,一个事务的执行不应影响其他事务的执行。

4:持久性(Durability):事务的持久性是一旦整个事务提交成功,数据的修改应该永久保存在数据库中,并不可逆转。

隔离性(Isolation)

事务指定了4种隔离级别(从弱到强分别是):

在事务的并发操作中可能会出现脏读(dirty read),不可重复读(repeatable read),幻读(phantom read)。

1:Read Uncommitted(读未提交):一个事务可以读取另一个未提交事务的数据。

2:Read Committed(读提交):一个事务要等另一个事务提交后才能读取数据。

3:Repeatable Read(重复读):在开始读取数据(事务开启)时,不再允许修改操作。

4:Serializable(序列化):Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。

大多数数据库默认的事务隔离级别是Read committed,比如Sql Server , Oracle。MySQL的默认隔离级别是Repeatable read。

Spring事务的传播性

事务的传播级别和数据隔离级别,是事务控制的两个主要特性。传播级别定义的是事务的控制范围,事务隔离级别定义的是事务在数据库读写方面的控制范围。

Spring事务传播性有七种,REQUIRED、SUPPORTS、REQUIRES-NEW、NOT-SUPPORTED、MANDATORY、NEVER、NESTED。如下思维导图:

Spring事务的传播特性介绍:

Spring事务传播特性总结:

Spring事务的隔离级别?

Spring事务的隔离级别:

Spring事务的架构?

Spring 的事务框架设计理念的基本原则是:让事务管理的关注点与数据访问关注点相分离。

架构

Spring 的事务抽象包括3个主要接口,分别是PlatformTransactionManager、TransactionDefinition、TransactionSatus。

使用Spring如何进行事务管理?

事务管理配置

编程式事务使用TransactionTemplate或者直接使用底层的PlatformTransactionManager。对于编程式事务管理,spring推荐使用TransactionTemplate。

声明式事务是建立在AOP之上的。其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务。声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需在配置文件中做相关的事务规则声明(或通过基于@Transactional注解的方式),便可以将事务规则应用到业务逻辑中。

显然声明式事务管理要优于编程式事务管理,这正是spring倡导的非侵入式的开发方式。声明式事务管理使业务代码不受污染,一个普通的POJO对象,只要加上注解就可以获得完全的事务支持。和编程式事务相比,声明式事务唯一不足地方是,它的最细粒度只能作用到方法级别,无法做到像编程式事务那样可以作用到代码块级别。但是即便有这样的需求,也存在很多变通的方法,比如,可以将需要进行事务管理的代码块独立为方法等等。

声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解。显然基于注解的方式更简单易用,更清爽。

本文转载自微信公众号「Java编程技术乐园」,可以通过以下二维码关注。转载本文请联系Java编程技术乐园公众号。


网页名称:继续卷!面试又问Spring 事务有几种传播行为和隔离级别?
URL网址:http://cdbrznjsb.com/article/dpgooch.html

其他资讯

让你的专属顾问为你服务