一、注解TxcTransaction
二、在其注解接口附近查找aop配置:TransactionAspect
三、runTransaction是在执行事务业务代码时的包装逻辑
四、transactionServiceExecutor.transactionRunning(info);
五、获取本地分布式事务控制器 loadDTXLocalControl找到TxcRunningTransaction
六、根据注解和切面配置,resolvePropagationState返回是DTXPropagationState.JOIN
七、DTXServiceExecutor dtxLocalControl.doBusinessCode(info),直接线索中断
八、回到刚才切面所在的包,发现还有DataSourceAspect,对数据库链接进行了替换,很是重要,先看看链接的接口有什么东西,想一想咱们的jdbc写法也是弄一个链接,而后调用其中的各类方法
九、
DTXResourceWeaver 对获取db链接进行了封装,其中有执行sql的相关动做改写
txLcnBeanHelper.loadTransactionResourceProxy(transactionType);
找到transaction_txc TxcTransactionResourceProxy执行的proxyConnection,继续进入方法
十、查看ConnectionWrapper其中的commit rollback等对原始的数据库链接进行了替换,有用到jdbcEventListener,分析listener
十一、找到ConnectionHelper其中注入的CompoundJdbcEventListener,这个bean在类名上已经进行了标记,里面用的P6spyJdbcEventListener其实是TxcJdbcEventListener
十二、随便看个update 63行看看拦截的处理sqlExecuteInterceptor.preUpdate((Update) statement);粗看其中的代码,有一段前置准备,最后96行txcService.resolveUpdateImage(updateImageParams);
1三、粗看resolveUpdateImage其中代码,就是对影响范围进行分析,而后保留undo数据(195行方法内部162行)
1四、到此基本咱们能够验证以前的txc的理论,刚才部分分析比较粗略,你们有时间能够本身细看sql