`
ziwuzu
  • 浏览: 51043 次
  • 性别: Icon_minigender_1
  • 来自: 长春
社区版块
存档分类
最新评论

Spring事务管理

阅读更多

spring的事务管理:

1. AbstractPlatformTransationManager定义了事务操作的基本流程:

    获得事务(判断当前是否有事务,事务传播是否合法)

    开始事务

    提交事务

    回滚事务

    事务结束后清理资源,释放连接

 

2.    Spring抽象出了Transaction代表事务,执行事务的提交,回滚等操作,定义了TransactionStatus代表事务的状态,设置事务的属性,为程序员设置事务回滚提供了接口。利用静态类和threadLocal对象存储线程独立的Transaction,Datasource信息(同一事务中对同一数据源是一个连接)

 

3. 对单数据源事务,spring不仅抽象出事务,还插手了连接的获得与释放,如DataSourceTransactionManager,HibernateTransactionManager,IBATIS,JPA等

 

4. 对分布式事务(JTA,用XA协议实现),spring的主要工作是抽象出统一的调用接口JTATransactionManager,连接管理还是由分布式事务管理器自己实现。如Jboss,Jotm,atomiks等。

 

5. 可以采用编程式事务,利用spring提供的TransactionTemplate或TransactionManager。

    也可以利用AOP,配置实现事务管理。

 

6. 对事务的传播级别,一般为required。

     开始事务时:此时如果有事务,则不新生成事务,而且返回一个TransactionStatus,但isNewTransaction为false,Transaction是同一个。

    提交事务时:如果transactionStatus的isNewTransaction为false,则不提交。

    回滚事务时:如果transactionStatusisNewTransaction为false,则设置rollbackOny为true。

 

7. 如果事务的传播级别为,nested,则对单数据源事务通过调用jdbc3.0的savepoint api实现嵌套事务,分布式事务不是。

 

8. 如果事务的传播级别为required_new,则会新起一个事务,对DataSoureTransactionManager,则新起一个连接,同时将原事务挂起,将原事务资源放到新起的事务的suspendResource属性中,如果新事务提交或者回滚,则在结束时调用resume方法将原事务还原。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics