Spring事务管理API有100个左右,其中最核心的API有3个,分别是TransactionDefinition
、 PlatformTransactionManager
、TransactionStatus
。TransactionDefinition
定义事务管理五个属性,PlatformTransactionManager
执行具体的事务,TransactionStatus
提供控制事务执行和查询事务状态的方法。Spring事务管理主要API结构以下java
TransactionDefinition
接口是用于定义一个事务,它定义了Spring事务管理的五大属性,在上一篇文章中有详细介绍。Spring提供了一个该接口的默认实现类DefaultTransactionDefinition
,该类可用于大多数属于管理状况。若是该类不能知足需求,能够经过实现TransactionDefinition
接口来定义本身的事务实现。TransactionDefinition
接口源码以下:spring
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
接口源码以下:sql
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();//查询事务是否结束 }
PlatformTransactionManager
根据TransactionDefinition
定义进行事务管理,管理过程当中事务存在多种不一样的状态,每一个事务状态信息都经过TransactionStatus
进行表示。PlatformTransactionManager
的默认实现类AbstractPlatformTransactionManager
,针对不一样的数据库持久化操做技术,又分别有不一样的实现类DataSourceTransactionManager
,HibernateTransactionManager
,JpaTransactionManager
三个实现类,还有其余的。编程
Spring不直接进行事务管理,而是针对不一样的平台提供了多种事务管理器,将事务管理的职责委托给Jdbc、Hibernate、Jpa、iBatis等持久化机制所提供的相关平台框架的事务机制来实现。Spring事务管理的接口是org.springframework.transaction.PlatformTransactionManager
,经过这个接口,Spring为各个平台提供了对应的事务管理器,至于具体的实现是各个平台的事情Spring并不关心,这就是 Spring事务管理的一个优势:为不一样的平台事务API提供了一致的编程模型。session
JDBC事务框架
若是在项目开发中直接使用JDBC来进行持久化操做,DataSourceTransactionManager
会用来处理事务边界。DataSourceTransactionManager
是经过调用Java.sql.Connection
来管理事务,然后者是经过DataSource获取到的。经过调用链接的commit()方法来提交事务,一样,事务失败则经过调用rollback()方法进行回滚。为了使用DataSourceTransactionManager
,你须要使用以下的XML将其装配到应用程序的上下文定义中:分布式
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource" /> </bean>
Hibernate事务spa
若是在实际项目开发中使用Hibernate来实现持久化操做,须要使用HibernateTransactionManager
。sessionFactory属性须要装配一个Hibernate的session工厂,HibernateTransactionManager
的实现细节是它将事务管理的职责委托给org.hibernate.Transaction
对象,然后者是从Hibernate Session中获取到的。当事务成功完成时,HibernateTransactionManager
将会调用Transaction对象的commit()方法,反之,将会调用rollback()方法。对于Hibernate3,Hibernate事务的使用须要在Spring的配置文件上下文定义中添加以下<bean>的声明:hibernate
<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean>
Java持久化API事务(JPA)
若是在实际项目开发中使用JPA来实现持久化操做,那你须要使用Spring的JpaTransactionManager
来处理事务。JpaTransactionManager
只须要装配一个JPA实体管理工厂(javax.persistence.EntityManagerFactory
接口的任意实现)。JpaTransactionManager
将与由工厂所产生的JPA EntityManager
合做来构建事务。你须要在Spring中以下配置JpaTransactionManager
:
`
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
>“ 本订阅号提供Java相关技术分享,从Java编程基础到Java高级技术,从JavaWeb技术基础Jsp、Servlet、JDBC到SSH、SSM开发框架,从REST风格接口设计到分布式项目实战。剖析主流开源技术框架,用亲身实践来谱写深度Java技术日志。“