Spring 事务管理笔记

来源:互联网 发布:淘宝网手套 编辑:程序博客网 时间:2024/04/30 23:58

本文大部分是对Spring reference的翻译,属于读书笔记/摘要:

为什么要有Spring 事务管理,它的好处:

为所有不同的事务API提供一致的访问方式。

支持声明式事务管理。

简化编程式事务管理。

与Spring的数据访问抽象集成。

 

Spring事务抽象的关键式是事务策略。一个事务策略是由这个接口定义的:

org.springframework.transaction.PlatformTransactionManager

 

public interfacePlatformTransactionManager {      TransactionStatusgetTransaction(            TransactionDefinition definition)throws TransactionException;     void commit(TransactionStatus status)throws TransactionException;     void rollback(TransactionStatus status)throws TransactionException; }

TransactionException会被PlatformTransactionManager的每个方法抛出,它是一个unchecked Exception. 继承了java.lang.RuntimeException

 

getTransaction(..)方法返回一个TransactionStatus对象。TransactionStatus对象可能代表了一个新的transaction,也可能是一个已有的transaction。TransactionStatus是跟一个线程的执行相关联的。

 

TransactionDefinition接口定义了以下内容:

Isolation:事务隔离度。一个事务对其他事务的隔离程度。比如它是不是允许对其他事务没有commit的数据。

Propagation:事务传播机制。一般情况下一个事务中的代码都会在本事务中执行,但是如果在执行这个方法之前已经有事务存在,你可以选择就在这个现有的事务中执行,也可以选择让当前事务挂起而创建一个新的事务执行你的代码。

Timeout:事务的超时时间。如果一个事务执行超过了设定的超时时间就会自动回滚。

Read-only status:当你的代码只做读操作时。只读事务对一些情况时很好的优化,比如Hibernate。

 

public interface TransactionStatus extends SavepointManager {      boolean isNewTransaction();      boolean hasSavepoint();      void setRollbackOnly();      boolean isRollbackOnly();      void flush();      boolean isCompleted();  }

 

使用Spring的事务管理,第一步就是定义一个PlatformTransactionManager的实现,一般时用依赖注入的方式。

JDBC的实现:DataSourceTransactionManager

 

JTA的实现:JtaTransactionManager

 

Hibernate的实现LocalSessionFactoryBean

 

Rollbackrules使得用户可以指定在发生哪些Exception或者throwables的时候rollback。在发生unchecked exception时是自动rollback的。

 

@Transactional只有加在public的方法上才有作用。

@Transactional可以被加在interface上,interface的方法上,类定义上,类的公共方法上。


0 0
原创粉丝点击