资讯专栏INFORMATION COLUMN

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

lykops / 2287人阅读

摘要:事务管理结构事务管理有个左右,其中最核心的有个,分别是。事务管理主要结构如下三个核心接口源码解析接口是用于定义一个事务,它定义了事务管理的五大属性,在上一篇文章中有详细介绍。只需要装配一个实体管理工厂接口的任意实现。

1.Spring事务管理API结构

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

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

   TransactionDefinition接口是用于定义一个事务,它定义了Spring事务管理的五大属性,在上一篇文章中有详细介绍。Spring提供了一个该接口的默认实现类DefaultTransactionDefinition,该类可用于大多数属于管理情况。如果该类不能满足需求,可以通过实现TransactionDefinition接口来定义自己的事务实现。TransactionDefinition接口源码如下:

public interface TransactionDefinition {
     int PROPAGATION_REQUIRED = 0;
     int PROPAGATION_SUPPORTS = 1;
     int PROPAGATION_MANDATORY = 2;
     int PROPAGATION_REQUIRES_NEW = 3;
     int PROPAGATION_NOT_SUPPORTED = 4;
     int PROPAGATION_NEVER = 5;
     int PROPAGATION_NESTED = 6;
     int ISOLATION_DEFAULT = -1;
     int ISOLATION_READ_UNCOMMITTED = 1;
     int ISOLATION_READ_COMMITTED = 2;
     int ISOLATION_REPEATABLE_READ = 4;
     int ISOLATION_SERIALIZABLE = 8;
     int TIMEOUT_DEFAULT = -1;
     int getPropagationBehavior();//事务的传播行为
     int getIsolationLevel();//事务的隔离级别
     int getTimeout();//事务超时时间
     boolean isReadOnly();//是否只读
     String getName();
 }

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

public interface PlatformTransactionManager {
   //根据事务定义信息,获得当前状态
   TransactionStatus getTransaction(TransactionDefinition var1) throws TransactionException;
   //提交事务
   void commit(TransactionStatus var1) throws TransactionException;
   //回滚事务
   void rollback(TransactionStatus var1) throws TransactionException;
 }

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

public interface TransactionStatus extends SavepointManager, Flushable {
     boolean isNewTransaction();//是否一个新的事务
     boolean hasSavepoint();//
     void setRollbackOnly();//将事务设置为只能回滚,不允许提交
     boolean isRollbackOnly();//查询事务是否已有回滚标志
     void flush();
     boolean isCompleted();//查询事务是否结束
 }
3.三个核心接口之间的关系

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

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的配置文件上下文定义中添加如下的声明:

 
     
 

Java持久化API事务(JPA)

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

 

>“
本订阅号提供Java相关技术分享,从Java编程基础到Java高级技术,从JavaWeb技术基础Jsp、Servlet、JDBC到SSH、SSM开发框架,从REST风格接口设计到分布式项目实战。剖析主流开源技术框架,用亲身实践来谱写深度Java技术日志。“

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/67980.html

相关文章

  • Spring核心 Spring简介

    摘要:基于工厂,会有多种应用上下文的实现的模块在模块中,面向切面编程提供了丰富的支持,该模块是应用系统中开发切面的基础,可以帮助应用对象解耦。的主页安全对于许多应用都是一个非常关键的切面。 简化Java开发 JavaBean:Enterprise JavaBean、EJBJDO:Java数据对象、Java Data ObjectPOJO:Plain Old Java ObjectDI:依赖注...

    sixgo 评论0 收藏0
  • Spring之旅第二站:bean、新特性。。。

    摘要:除了,还简单介绍了对的支持,可以帮助应用将散落在各处的逻辑汇集于一处切面。当装配的时候,这些切面能够运行期编织起来,这样就能呢个非常有效的赋予新功能。 第1章 Spring之旅 说明 1、本文参考了《Spring 实战》重点内容,参考了GitHub上的代码 2、每个人的学习方式不一样,但目的是一样的,活学活用。最近一直在听《我们不一样》 3、本文只为记录作为以后参考,要想真正领悟Sp...

    luodongseu 评论0 收藏0
  • 慕课网_《Spring事务管理》学习总结

    摘要:事务管理学习总结时间年月日星期二说明本文部分内容均来自慕课网。一致性一致性指事务前后数据的完整性必须保持一致。声明式事务管理基于的方式很少使用需要为每个进行事务管理的类,配置一个进行增强。 《Spring事务管理》学习总结 时间:2017年2月7日星期二说明:本文部分内容均来自慕课网。@慕课网:http://www.imooc.com/教学示例源码:https://github.com...

    Airy 评论0 收藏0
  • Spring之旅第一站(不得不佩服老外...)

    摘要:表示少女与紧耦合在它的构造函数中自行创建了。面向切面编程往往被定义为促使软件系统实现关注点的分离一项技术系统由许多不同的组件组成,每个组件各负责一特定的功能。我们可以把切面想象为覆盖在很多组件之上的一个外壳。 第1章 Spring之旅 说明 1、本文抄写了《Spring 实战》重点内容,参考了GitHub上的代码 2、每个人的学习方式不一样,但目的是一样的,活学活用。最近一直在听《我...

    thekingisalwaysluc 评论0 收藏0
  • 《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》

    摘要:下一代服务端开发下一代服务端开发第部门快速开始第章快速开始环境准备,,快速上手实现一个第章企业级服务开发从到语言的缺点发展历程的缺点为什么是产生的背景解决了哪些问题为什么是的发展历程容器的配置地狱是什么从到下一代企业级服务开发在移动开发领域 《 Kotlin + Spring Boot : 下一代 Java 服务端开发 》 Kotlin + Spring Boot : 下一代 Java...

    springDevBird 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<