Spring框架事务管理机制源码分析:rollback(TransactionStatus var1)

事务处理的完成有两种情况,即回滚事务或者提交事务。

AbstractPlatformTransactionManager提供的rollback(TransactionStatus)和commit(TransactionStatus)两个模板方法,分别对应这两种情况的处理。

在事务处理过程中,我们可以通过TransactionStatus的setRollbackOnly方法标记事务回滚,所以commit(TransactionStatus)在具体提交事务之前会检查rollBackOnly状态,如果该状态被设置,则转而执行事务的回滚操作。

rollback(TransactionStatus var1) 的逻辑主要包含以下3点:

1、回滚事务

  • 如果是嵌套事务,则通过TransactionStatus释放Savepoint。
  • 如果TransactionStatus表示当前事务是一个新事务,则调用子类的doRollback(TransactionStatus)方法真正的回滚事务。doRollback(TransactionStatus)是抽象方法,子类必须去实现它。
  • 如果当前存在事务,并且rollbackOnly状态被设置,则调用由子类实现的doSetRollbackOnly(TransactionStatus)方法,各子类实现通常会将当前的transaction object 状态设置成rollBackOnly

2、触发Synchronization事件

3、清理事务资源:

  • 设置TransactionStatus中的completed为完成状态
  • 清理当前事务相关的Synchronization
  • 调用doCleanupAfterCompletion()释放事务资源,并解除到Transaction SynchronizationManager的资源绑定。对于DataSourceTransactionManager来说,是关闭数据库连接,然后解除对DataSource对应资源的绑定。
  • 如果之前有挂起的事务恢复事务的挂起。

猜你喜欢

转载自www.cnblogs.com/yaohuiqin/p/9486975.html