Spring-tx-4.3.14.RELEASE

核心: 拦截器, 和其父类 org.springframework.aop.framework.ReflectiveMethodInvocation 相关(aop的包里) 以及 org.springframework.transaction.interceptor.TransactionAspectSupport 相关

org.springframework.transaction.interceptor.TransactionInterceptor 类中的 invoke(final MethodInvocation invocation) 方法中的 invokeWithinTransaction() 方法

开启事务, 执行sql, 提交或回滚的核心逻辑: invokeWithinTransaction(Method method, Class<?> targetClass, final InvocationCallback invocation)

if (txAttr == null || !(tm instanceof CallbackPreferringPlatformTransactionManager)) {
	// Standard transaction demarcation with getTransaction and commit/rollback calls.
    // 创建事务, 如果加了 @Transaction 注解, 就会创建
	TransactionInfo txInfo = createTransactionIfNecessary(tm, txAttr, joinpointIdentification);
	Object retVal = null;
	try {
	    // This is an around advice: Invoke the next interceptor in the chain.
	    // This will normally result in a target object being invoked.
        // 执行sql, 就是自己写的语句
        retVal = invocation.proceedWithInvocation();
	}
	catch (Throwable ex) {
	    // target invocation exception
        // catch异常执行回滚
	    completeTransactionAfterThrowing(txInfo, ex);
	    throw ex;
	}
	finally {
	    cleanupTransactionInfo(txInfo);
	}
    // 提交事务, 落库
	commitTransactionAfterReturning(txInfo);
	return retVal;
}

事务核心调用链

分布式事务-02-Spring-tx核心

结论: 通过一系列的调用, 先找到合适的 PlatformTransactionManager(事务管理器), 有jpa的包默认用jpa的事务管理器, 选用对应的连接池, 再执行对应的抽象父类的begin方法, 最终使用jdbc包下的api开启/提交/回滚事务

相关文章:

  • 2021-11-30
  • 2022-12-23
  • 2021-07-03
  • 2021-12-21
  • 2021-05-11
  • 2021-08-15
  • 2022-12-23
猜你喜欢
  • 2021-07-10
  • 2021-11-23
  • 2021-04-27
  • 2022-12-23
  • 2021-04-04
  • 2021-10-26
  • 2021-10-19
相关资源
相似解决方案