Spring事务整理篇
看到一篇写得比较好的文章,比较连贯、深入。有逻辑的东西才是好东西。
https://www.jianshu.com/p/00b46f2f397c
主要讲述:
- 什么是事务、事务的目的;
- 展开讲述ACID属性(原子性、一致性、隔离性、持久性);
- 然后讲述其中的例子和常见的问题;如隔离性中的隔离等级,以及不同隔离等级下的不同问题(脏读、幻读、不可重复读取等)。
- java事务处理与数据访问技术的关系;
- 基本关系。事务处理操作会随着数据访问技术的不同而各异。我们不是使用专用的事务API来管理事务,而是通过当前数据访问技术提供的基于connection的API来管理事务;即: 使用数据访问技术的API来进行事务处理。常见的数据访问技术?JDBC、Hibernate等;
- 这种基本关系下的问题。
- 各种数据访问方式只提供了简单的事务API,但没有更高层次的抽象来帮助我们隔离事务与数据访问的过紧耦合。
- 事务处理过程中的异常应该都是不可恢复的,所以应该抛出
unchecked exception
,并且有一个统一的父类便于客户端处理。但现在没有一个统一的事务相关异常体系,我们需要捕捉特定API异常并处理。- 对于开发人员,所谓事务的管理,最多也就是界定一下事务的边界,规定什么时候开始,什么时候结束。但没有一个统一的方式对事务进行管理。
- Spring事务架构
- 其基本原则。事务管理的关注点与数据访问的关注点相分离。
- Spring事务接口
如图所示:
- 介绍这三个事务接口的功能。
Spring事务抽象一共有3个主要接口,他们都在
org.springframework.transaction
包下。
PlatformTransactionManager
是Spring事务框架的核心接口,它为应用程序提供事务边界的统一方式,它根据TransactionDefinition
的定义来开启相关事务。TransactionDefinition
负责定义事务相关属性,包括隔离级别、传播行为等。- 事务开启期间的事务状态由
TransactionStatus
负责,也可以通过TransactionStatus
对事务进行有限的控制。
接下来,就是详细的接口介绍了。
限于篇幅,关于事务管理的三个主要接口的介绍另起文章。