今天开始研究Spring事务的底层原理。内容很多,应该分为三个部分:Spring事务框架。Spring事务介绍机制,主要学习@EnableTransactionManagement。Spring事务的控制机制主要学习@Trasactional相关内容。让我们从Spring事务的框架说起。Spring事务框架中最重要的内容主要包括:事务管理器TransactionManager。事务定义TransactionDefinition。交易状态TransactionStatus。其中,事务管理器是核心。研究事务管理器,需要用到TransactionDefinition和TransactionStatus,所以先研究这两部分。TransactionDefinition顾名思义,TransactionDefinition用于定义交易属性。有两个重要的实现类,一个是DefaultTransactionAttribute。另一个是DefaultTransactionTemplate:我们看一下TransactionDefinition中定义的几个事务属性:事务传播机制,7个事务传播机制的具体含义,我们在其他文章中分析过了Passed:intPROPAGATION_REQUIRED=0;传播支持=1;intPROPAGATION_MANDATORY=2;intPROPAGATION_REQUIRES_NEW=3;intPROPAGATION_NOT_SUPPORTED=4;intPROPAGATION_NEVER=5;级别intISOLATION_DEFAULT=-1;intISOLATION_READ_UNCOMMITTED=1;intISOLATION_READ_COMMITTED=2;intISOLATION_REPEATABLE_READ=4;intISOLATION_SERIALIZABLE=8;默认超时intTIMEOUT_DEFAULT=-1;staticTransactionDefinitionwithDefaults(){returnStaticTransactionDefinition.INSTANCE;DefaultTransactionAttribute的一个比较重要的方法是rollbackOn:publicbooleanrollbackOn(Throwableex){return(exinstanceofRuntimeException||exinstanceofError);让我们先看一下JavaDoc:默认行为与EJB一样:在未经检查的异常(RuntimeException)上回滚,假设在任何业务规则之外产生意外结果。此外,我们还尝试回滚错误,这显然也是一个意想不到的结果。相比之下,已检查的异常被认为是业务异常,因此是常规的业务预期结果,即一种仍然允许定期完成资源操作的替代返回值。这在很大程度上与TransactionTemplate的默认行为一致,除了TransactionTemplate还会回滚未声明的已检查异常(事务检查角落,用于声明性案例)。有意声明为业务异常的异常,默认情况下导致提交。默认行为与EJB相同:发生运行时异常或错误时回滚。对于检查异常,一般认为是业务可以认可或预期的结果。因此允许交易完成。此默认行为与TransactionTemplate的默认行为一致。大概意思就是默认情况下,事务会在运行时异常或者Error发生的时候回滚。这个默认行为由这个rollbackOn方法保证:publicbooleanrollbackOn(Throwableex){return(exinstanceofRuntimeException||exinstanceofError);}Spring事务控件中事务定义的最终实现是这个TransactionAttribute,但是He是通过TransactionAttributeSource持有的,在分析Spring事务启用机制@EnalbeTransactionManagment时就会看到。TransactionDefinition的研究就到这里了,下一篇再研究TransactionStatus。PreviousSpringTransactionPropagationMechanismNextTransactionStatusofSpringTransactionFramework
