SpringTransactionFramework的第二部分今天就是分析TransactionStatus。用于记录事务执行过程中的状态,最终决定事务是否可以提交,是否需要回滚等。先来看一下TransactionStatus的类结构:TransactionStatus:publicinterfaceTransactionStatusextendsTransactionExecution,SavepointManager,Flushable{/***返回这个事务内部是否携带了一个保存点,*即已经创建为基于一个保存点的嵌套事务。*
此方法主要用于诊断目的,与*{@link#isNewTransaction()}一起使用。对于自定义*保存点的编程处理,请使用{@linkSavepointManager}提供的操作。*@see#isNewTransaction()*@see#createSavepoint()*@see#rollbackToSavepoint(Object)*@see#releaseSavepoint(Object)*/booleanhasSavepoint();如果适用,将底层会话刷新到数据存储:例如,所有受影响的Hibernate/JPA会话。这实际上只是一个提示,如果底层事务管理器没有刷新概念,则可能是空操作。刷新信号可能会应用于主要资源rce或事务同步,取决于底层资源。@Overridevoidflush();}他只定义了两个方法:hasSavepoint:返回事务是否包含保存点,即是否基于嵌套事务创建保存点保存点。概念上一篇文章已经分析过了。flush:这个应该和Hibernate或者JPA有关,具体功能暂时忽略,Hibernate相关的东西就不研究了。走了。但是这个接口继承了三个接口:TransactionExecution、SavepointManager、Flushable。我们快速看一下:TransactionExecution是一个非常简单的接口,它是交易状态的通用接口。它定义了当前交易是否是一个新的交易。事务是回滚状态,获取事务是否已经完成的方法等。/***事务当前状态的通用表示。*作为{@linkTransactionStatus}和*{@linkReactiveTransaction}的基础接口。**@authorJuergenHoeller*@since5.2*/publicinterfaceTransactionExecution{/***返回当前交易是否为新交易;以其他方式参与*现有交易,或者可能不首先在实际*交易中运行。*/booleanisNewTransaction();/***设置事务只回滚。这指示事务管理器*事务的唯一可能结果可能是回滚,作为*抛出异常的替代方法,后者会触发回滚。*/voidsetRollbackOnly();/***返回事务是否被标记为只回滚*(由应用程序或事务基础设施)。*/booleanisRollbackOnly();/***返回本次事务是否完成,即*是否已经提交或回滚。*/booleanisCompleted();}SavepointManager提供了3种方法:创建保存点、回滚到保存点、释放保存点ObjectcreateSavepoint()throwsTransactionException;voidrollbackToSavepoint(Objectsavepoint)抛出TransactionException;voidreleaseSavepoint(Objectsavepoint)抛出TransactionException;不说Flushable,就是上面的flush方法。AbstactTransactionStatus&DefaultTransactionStatusAbstactTransactionStatus持有交易的几个重要状态。业务执行完毕后,Spring事务管理器需要通过状态判断事务是提交还是回滚。privatebooleanrollbackOnly=false;私人布尔完成=假;@Nullable私有对象保存点;Spring事务管理机制中TransactionStatus的最终实现是DefaultTransactionStatus,代码就不贴了,比较简单。其实通过对TransactionStatus的分析我们可以得出一个结论,就是带有savepoint的事务的回滚是通过TransactionStatus实现的。TransactionStatus持有事务对象transaction,事务的保存点保存在事务中,最后通过调用事务的rollbackToSavepoint将事务回滚到存储点。好了,TransactionStatus就分析到这里了。上一篇Spring事务框架之TransactionDefinition下一篇Spring事务框架之TransactionManager(一)