暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Spring声明式事务管理之二:核心接口API

云时代架构 2017-08-01
578

1.Spring事务管理API结构

Spring事务管理API有100个左右,其中最核心的API有3个,分别是TransactionDefinition
PlatformTransactionManager
TransactionStatus
  TransactionDefinition
定义事务管理五个属性,PlatformTransactionManager
执行具体的事务,TransactionStatus
提供控制事务执行和查询事务状态的方法。Spring事务管理主要API结构如下:

Spring事务管理主要API

2.三个核心API接口源码解析

TransactionDefinition
接口是用于定义一个事务,它定义了Spring事务管理的五大属性,在上一篇文章中有详细介绍。Spring提供了一个该接口的默认实现

DefaultTransactionDefinition
,该类可用于大多数属于管理情况。如果该类不能满足需求,可以通过实现TransactionDefinition
接口来定义自己的事务实现。TransactionDefinition
接口源码如下:

PlatformTransactionManager
接口用于执行具体的事务,包括获取当前事务状态,提交事务、事务回滚等。

PlatformTransactionManager
接口源码如下:

TransactionStatus
接口代表了一个事务本身,提供了一个简单的控制事务执行和查询事务状态的方法。PlatformTransactionManager
接口的getTransaction()方法会返回一个TransactionStatus
对象,该对象可能代表一个新的或者一个已经存在的事务。TransactionStatus
接口源码如下:

3.三个核心接口之间的关系

PlatformTransactionManager
根据TransactionDefinition
定义进行事务管理,管理过程中事务存在多种不同的状态,每个事务状态信息都通过TransactionStatus
进行表示。PlatformTransactionManager
的默认实现AbstractPlatformTransactionManager
,针对不同的数据库持久化操作技术,又分别有不同的实现类DataSourceTransactionManager
HibernateTransactionManager
JpaTransactionManager
三个实现类,还有其他的。

4.不同平台框架事务管理实现

Spring不直接进行事务管理,而是针对不同的平台提供了多种事务管理器,将事务管理的职责委托给Jdbc、Hibernate、Jpa、iBatis等持久化机制所提供的相关平台框架的事务机制来实现。Spring事务管理的接口是org.springframework.transaction.PlatformTransactionManager
,通过这个接口,Spring为各个平台提供了对应的事务管理器,至于具体的实现是各个平台的事情Spring并不关心,这就是 Spring事务管理的一个优点:为不同的平台事务API提供了一致的编程模型。

JDBC事务

如果在项目开发中直接使用JDBC来进行持久化操作,DataSourceTransactionManager
会用来处理事务边界。DataSourceTransactionManager
是通过调用Java.sql.Connection
来管理事务,而后者是通过DataSource获取到的。通过调用连接的commit()方法来提交事务,同样,事务失败则通过调用rollback()方法进行回滚。为了使用DataSourceTransactionManager
,你需要使用如下的XML将其装配到应用程序的上下文定义中:

Hibernate事务

如果在实际项目开发中使用Hibernate来实现持久化操作,需要使用HibernateTransactionManager
。sessionFactory属性需要装配一个Hibernate的session工厂,HibernateTransactionManager
的实现细节是它将事务管理的职责委托给org.hibernate.Transaction
对象,而后者是从Hibernate Session中获取到的。当事务成功完成时,HibernateTransactionManager
将会调用Transaction对象的commit()方法,反之,将会调用rollback()方法。对于Hibernate3,Hibernate事务的使用需要在Spring的配置文件上下文定义中添加如下<bean>的声明:

Java持久化API事务(JPA)

如果在实际项目开发中使用JPA来实现持久化操作,那你需要使用Spring的JpaTransactionManager
来处理事务。JpaTransactionManager
只需要装配一个JPA实体管理工厂(javax.persistence.EntityManagerFactory
接口的任意实现)。JpaTransactionManager
将与由工厂所产生的JPA EntityManager
合作来构建事务。你需要在Spring中如下配置JpaTransactionManager


《分布式服务架构:原理、设计与实战》是一本不可多得的理论与实践相结合的架构书籍,京东购买请扫下面二维码。



如果你想成为优秀的架构师

在【云时代架构】精品群免费进!


我在【云时代架构】技术社区,你在哪里?


还等什么,赶快加入【云时代架构】技术社区!

请猛扫下面二维码。


云时代架构

做互联网时代最适合的架构

开放、分享、协作

快速关注,请猛扫下面二维码!


  

简书博客                      云时代架构


文章转载自云时代架构,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论