Spring事务管理抽象
Spring 事务管理的SPI抽象层的三个主要接口,分别是:PlatformTransactionManager
,TransactionDefinition
,TransactionStatus
TransactionDefinition
用于描述事物的隔离级别,超时时间,是否为只读事务,事务传播行为
TransactionStatus
代表了一个事务的运行状态
PlatformTransactionManager
抽象事务的提交和回滚(回滚到事务的某个保存点后提交) ,也是Spring事务编程的核心接口。
public interface PlatformTransactionManager{
TransactionStatus getTransaction(TransactionDefinition definition)
throws TransactinException;
void commit(TransactionStatus status) throws TransactinException;
void rollback(TransactionStatus status) throws TransactinException;
}
- getTransaction():返回一个已经激活的事务或创建一个新的事务(根据给定的TransactionDefinition类型参数定义的事务属性),返回的是TransactionStatus对象代表了当前事务的状态,其中该方法抛出TransactionException(未检查异常)表示事务由于某种原因失败。
- commit():用于提交TransactionStatus参数代表的事务。
- rollback():用于回滚TransactionStatus参数代表的事务。
- DataSourceTransactionManager,HibernateTransactionManager,JtaTransactionManager 等等都为该接口的具体实现。
public interface TransactionDefinition {
int getPropagationBehavior();
int getIsolationLevel();
int getTimeout();
boolean isReadOnly();
String getName();
}
- getPropagationBehavior():返回定义的事务传播行为;
- getIsolationLevel():返回定义的事务隔离级别;
- getTimeout():返回定义的事务超时时间;
- isReadOnly():返回定义的事务是否是只读的;
- getName():返回定义的事务名字。
public interface TransactionStatus extends SavepointManager {
boolean isNewTransaction();
boolean hasSavepoint();
void setRollbackOnly();
boolean isRollbackOnly();
void flush();
boolean isCompleted();
}
- isNewTransaction():返回 当前事务状态是否是新事务;
- hasSavepoint():返回当前事务是否有保存点 ;
- setRollbackOnly() :设置当前事务应该回滚;
- isRollbackOnly(() :返回当前事务是否应该回滚;
- flush() :用于刷新底层会话中的修改到数据库,一般用于刷新如Hibernate/JPA的会话,可能对如JDBC类型的事务无任何影响;
- isCompleted() :当前事务否已经完成。
内置事务管理器实现
- DataSourceTransactionManager :位于org.springframework.jdbc.datasource包中,数据源事务管理器,提供对单个javax.sql.DataSource事务管理,用于Spring JDBC抽象框架、iBATIS或MyBatis框架的事务管理;
- JpaTransactionManager :位于org.springframework.orm.jpa包中,提供对单个javax.persistence.EntityManagerFactory事务支持,用于集成JPA实现框架时的事务管理;
- HibernateTransactionManager :位于org.springframework.orm.hibernate3包中,提供对单个org.hibernate.SessionFactory事务支持,用于集成Hibernate框架时的事务管理;该事务管理器只支持Hibernate3+版本,且Spring3.0+版本只支持Hibernate 3.2+版本;
- JtaTransactionManager :位于org.springframework.transaction.jta包中,提供对分布式事务管理的支持,并将事务管理委托给Java EE应用服务器事务管理器;