一文搞定 Spring事务

Spring 事务上文 使用SpringJDBC
1、JDBC事务控制

? 不管你现在使用的是那一种ORM开发框架,只要你的核心是JDBC,那么所有的事务处理都是围绕着JDBC开展的,而JDBC之中的事务控制是由Connection接口提供的方法:
  • 1、关闭自动事务提交:connection.setAutoCommit(false);
  • 2、事务手工提交: connection.commit();
  • 3、事务回滚: connection.rollback();
在程序的开发之中事务的使用是存在有前提的:如果某一个业务现在需要同时执行若干条数据更新处理操作,这个时候才会使用到事务控制,除此之外是不需要强制性处理的 。

一文搞定 Spring事务

文章插图
按照传统的事务控制处理方法来讲一般都是在业务层进行处理的,而在之前分析过了如何基于AOP 设计思想采用动态代理设计模式实现的事务处理模型,这种操作可以在不侵入业务代码的情况下进行事务的控制,但是代码的实现过程实在是繁琐,现在既然都有了AOP处理模型了 , 所以对于事务的控制就必须有一个完整的加强 。
1.1、ACID事务原则ACID主要指的是事务的四种特点:原子性(Atomicity)、一致性(Consistency)、隔离性或独立性(lsolation)、持久性(Durabilily)四个特征:
  • 原子性(Atomicity):整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节 。事务在执行过程中发生错误 , 会被回滚(Rollback)到事务开始前的状态 , 就像这个事务从来没有执行过一样;
  • 一致性(Consistency):一个事务可以封装状态改变(除非它是一个只读的) 。事务必须始终保持系统处于一致的状态,不管在任何给定的时间并发事务有多少;
  • 隔离性(lsolation):隔离状态执行事务 , 使它们好像是系统在给定时间内执行的唯一操作 。如果有两个事务,运行在相同的时间内 , 执行相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统;
  • 持久性(Durability):在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚
2、Spring事务架构
Spring事务是对已有JDBC事务的进一步的包装型处理,所以底层依然是JDBC事务控制,而后在这之上进行了更加合理的二次开发与设计,首先先来看一下Spring 与JDBC事务之间的结构图 。

一文搞定 Spring事务

文章插图
? 只要是说到了事务的开发,那么就必须考虑到ORM组件的整合问题各类的ORM开发组件实在是太多了 , 同时Spring在设计的时候无法预知未来 , 那么这个时候在Spring 框架里面就针对于事务的接入提供了一个开发标准
? Spring事务的核心实现关键是在于:PlatformTransactionManager

一文搞定 Spring事务

文章插图
通过以上的代码可以发现,PlatfrmTransactionManager接口存在有一个TransactionManager父接口,下面打开该接口的定义来观察其具体功能 。

一文搞定 Spring事务

文章插图
? 在现代的开发过程之中,最为核心的事务接口主要使用的是PlatformTransactionManager(这也就是长久以来的习惯),在Spring最早出现声明式事务的时候,就有了这个处理接口了 。在进行获取事务的时候可以发现getTransaction()方法内部需要接收有一个TransactionDefinition接口实例,这个接口主要定义了Spring事务的超时时间,以及Spring事务的传播属性(是面试的关键所在),而在getTransaction()方法内部会返回有一个TransactionStatus接口实例,打开这个接口来观察一下 。.
public interface TransactionStatus extends TransactionExecution, SavepointManager, Flushable { boolean hasSavepoint(); // 是否存在hasSavepoint (事务保存点) void flush(); // 事务刷新}
而后该接口内部定义的时候又需要继承TransactionExecution、SavepointManager(事务保存点管理器)、Flushable(事务刷新)三个父接口 。下图就是Spring事务的整体架构 。

一文搞定 Spring事务

文章插图
3、编程式事务控制
由于现在很少用到这种编程式事务了,导致很多初学者根本不知道这其中是怎么配置的 。其实万变不离其宗 , 都是基于JDBC的事务控制 。

推荐阅读