protected Object invokeWithinTransaction(Method method, Class<?> targetClass, final InvocationCallback invocation)throws Throwable { if (txAttr == null || !(tm instanceof CallbackPreferringPlatformTransactionManager)) { // Standard transaction demarcation with getTransaction and commit/rollback calls. TransactionInfotxInfo= createTransactionIfNecessary(tm, txAttr, joinpointIdentification); ObjectretVal=null; try { // This is an around advice: Invoke the next interceptor in the chain. // This will normally result in a target object being invoked. retVal = invocation.proceedWithInvocation(); } catch (Throwable ex) { // target invocation exception // 事务异常处理 completeTransactionAfterThrowing(txInfo, ex); throw ex; } finally { cleanupTransactionInfo(txInfo); } commitTransactionAfterReturning(txInfo); return retVal; }
...
} }
1 2 3 4 5 6 7
publicclassDefaultTransactionAttributeextendsDefaultTransactionDefinitionimplementsTransactionAttribute { // 默认只回滚Error和RuntimeException publicbooleanrollbackOn(Throwable ex) { return (ex instanceof RuntimeException || ex instanceof Error); } ... }