一、SEATA CLIENT

2022-05-12 20:59:23 6 举报
AI智能生成
一、SEATA CLIENT
seata客户端源码解析--seata全局事务处理 1、首先,通过SpringBoot的自动配置,加载配置类SeataAutoConfiguration,在该类中创建bean GlobalTransactionScanner ; 2、GlobalTransactionScanner 类实现了接口AbstractAutoProxyCreator,AbstractAutoProxyCreator接口实现了方法SmartInstantiationAwareBeanPostProcessor,在方法postProcessAfterInitialization调用了方法wrapIfNecessary(Object bean, String beanName, Object cacheKey),而在类GlobalTransactionScanner 中重写了方法wrapIfNecessary(Object bean, String beanName, Object cacheKey),从而给容器中相关的bean进行代理。 3、GlobalTransactionScanner 实现了InitializingBean接口,实现了方法afterPropertiesSet(),在该方法中初始化TM和RM客户端,从而与TC进行通信,进行事务的发起,提交与回滚。 4、在GlobalTransactionScanner 类中的wrapIfNecessary()方法中,生成一个拦截器GlobalTransactionalInterceptor(); 5、在GlobalTransactionScanner 类的invoke(final MethodInvocation methodInvocation)方法中,会先判断执行的代理类的方法上是否存在全局事务注解@GlobalTransactional没存在则处理全局事务handleGlobalTransaction(methodInvocation, globalTransactionalAnnotation);,否则是否存@GlobalLock,则处理全局锁,否则,则为普通方法,直接执行方法内容。 6、在方法handleGlobalTransaction(methodInvocation, globalTransactionalAnnotation);中,会开启全局事务,执行业务逻辑,回滚事务,提交事务等,最终会通过第三步中的初始化的客户端,与TC进行全局事务的开启,提交,回滚等。
作者其他创作
大纲/内容
评论
0 条评论
回复 删除
取消
回复
下一页