avatar
文章
80
标签
34
分类
27
主页
归档
标签
分类
关于我
flyingzc's blog
主页
归档
标签
分类
关于我

flyingzc's blog

Narayana 事务 Commit 流程
发表于2023-12-11|Narayana
Narayana commit 流程整体流程123456789101112131415161718192021222324事务提交 判断是否能进行一阶段提交优化 若能一阶段提交 执行一阶段提交 否则 二阶段提交 prepare阶段 执行 xa end 执行 xa prepare xaResourceRecord 插入到 preparedList BasicAction#insertRecord 更新状态 ActionStatus.COMMITTING 保存状态,打包状态到 outputBuffer 里 XAResourceRecord#save_state...
Narayana 事务 begin 流程
发表于2023-12-08|Narayana
Narayana 事务 begin 流程整体流程12345检查事务状态获取超时时间创建事务对象 事务对象设置到 ThreadLocal 中,和当前线程绑定 插入事务测超时时间监控 使用 API123TransactionManager transactionManager = jtaPropertyManager.getJTAEnvironmentBean().getTransactionManager();// 开启全局事务transactionManager.begin(); 调用链路123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869internal.jta.transaction.arjunacore.BaseTransaction#begin开启事务 ...
Narayana 事务资源注册流程
发表于2023-12-08|Narayana
Narayana enlistResource流程XA 事务内每个物理连接执行第一条物理 sql 之前,需要执行 xa start 操作开启每个RM分支上的 xa 事务,并将 xaResource 注册到 TransactionManager 里。 整体流程12345678910transaction.enlistResource(xaResource) 执行 XA start xid 遍历 resource 判断当前是 isNewRM 创建 xid createRecord theTransaction.add(abstractRecord) record 添加到 BasicAction.RecordList 里 执行 xa start 语句,若失败重试 MysqlXAConnection#start 把 XAResource 缓存到 map 使用1234567// 获取 XADataSourceXADataSource xaDatasource =...
Narayana启动-注册恢复模块流程
发表于2023-12-07|Narayana
Narayana启动-注册恢复模块流程使用代码12// narayana 在启动阶段使用如下 api 加载恢复模块XARecoveryModulexaRecoveryModule = XARecoveryModule.getRegisteredXARecoveryModule(); 总体流程1234567891011121314151617注册恢复模块 反射创建 RecoveryEnvironmentBean 配置信息实例 加载 RecoveryActivators 启动 RecoveryActivators 初始化 PeriodicRecovery 设置恢复状态 INACTIVE 设置恢复mode ENABLED 加载恢复模块,module包括: 1.com.arjuna.ats.internal.arjuna.recovery.AtomicActionRecoveryModule ...
Narayana 事务管理器初始化流程
发表于2023-12-06|Narayana
事务管理器初始化流程总体流程12345678910创建 TransactionManagerImple 创建事务管理器对象读取 narayana 的 xml 配置,进行属性赋值获取 recovery 模块 加载恢复模块事务恢复日志的初始化初始化事务日志存储服务 JDBC方式存储 建表 文件方式存储 创建 TransactionManager 流程Narayana 会通过 BeanPopulator 反射创建对应的 TransactionManager 实例,并读取用户自定义的 xml 属性反射赋值到 TransactionManager 实例里。 1TransactionManager transactionManager =...
springboot对接tomcat
发表于2020-07-07|springboot
springboot对接tomcat调用的地方在 ServletWebServerApplicationContext 里. 创建 webServergetWebServer:166, TomcatServletWebServerFactory (org.springframework.boot.web.embedded.tomcat)createWebServer:181, ServletWebServerApplicationContext (org.springframework.boot.web.servlet.context)onRefresh:154, ServletWebServerApplicationContext (org.springframework.boot.web.servlet.context)refresh:543, AbstractApplicationContext (org.springframework.context.support)refresh:142, ServletWebServerApplicationContext...
springboot conditional 注解
发表于2020-07-01|spring-boot
@Conditional满足指定条件的时候才将某个 bean 加载到应用上下文中. 比如 FreemarkerAutoConfiguration 这个自动化配置类的定义如下: 1234567@ConditionalOnClass(ThreadPoolTaskScheduler.class)@Configuration@EnableConfigurationProperties(TaskSchedulingProperties.class)@AutoConfigureAfter(TaskExecutionAutoConfiguration.class)public class TaskSchedulingAutoConfiguration { // ...} 这个自动化配置类被 @ConditionalOnClass 条件注解修饰, 这个条件注解存在的意义在于判断类加载器中是否存在 ThreadPoolTaskScheduler 这个类, 如果存在的话会在 Spring 容器中加载这个 TaskSchedulingAutoConfiguration...
spring-boot EnableAutoConfiguration
发表于2020-06-14|springboot
spring-boot EnableAutoConfiguration1234567891011121314151617181920212223242526272829- refresh() -> invokeBeanFactoryPostProcessors()- ConfigurationClassPostProcessor.postProcessBeanDefinitionRegistry() - ConfigurationClassPostProcessor.processConfigBeanDefinitions() - 1.parser.parse(candidates)比如此时candidates是SpringApplication启动类 - ConfigurationClassParser.parse() - 1.不同类型的 beanDefinition,调用不同的 parse(),parse()方法 -> processConfigurationClass() -...
Spring ConfigurationClassParser
发表于2020-06-13|Spring
Spring ConfigurationClassParser123456789101112131415161718192021- ConfigurationClassPostProcessor.processConfigBeanDefinitions()- 1.获取 registry 中的 beanDefinitionNames- 2.遍历beanDefinitionNames判断beanDefinition 是否是 @Configuration 配置类,若是则添加到 configCandidates 集合中- 3.configCandidates根据Order排序- 4.创建ConfigurationClassParser,配置类解析器- 5.遍历configCandidates,调用parser.parse()进行配置类解析 - ConfigurationClassParser.parse() - 1.遍历configCandidates,获取当前的beanDefinition -...
Spring component-scan实现
发表于2020-06-06|spring
componet-scan分为 xml 配置 和 注解配置两种方式,二者入口不同,实现上没太多差别.都是先解析配置,根据配置的 basePackages 用asm扫描.class上是否有@Component注解,若有则生成beanName,注册到容器里即可. context:component-scan/实现配置1<context:component-scan base-package="com.zc"/> 切入点对于自定义标签的解析入口在 DefaultBeanDefinitionDocumentReader.parseCustomElement(ele); 里.1.先根据标签获取parser,这里是 ComponentScanBeanDefinitionParser 调用12345678910111213141516171819202122- NamespaceHandlerSupport.parse(): 根据元素获取parser进行处理,这里使用的是ComponentScanBeanDefinitionParser -...
1…456…8
avatar
flyingzc
不积跬步无以至千里
不积小流无以成江海
文章
80
标签
34
分类
27
Follow Me
公告
FlyingZC's Blog
最新文章
Jmeter 压测 ShardingSphere2025-07-01
Maven Shade 插件替换 Calcite Jar 包 class 文件2025-07-01
LinkedIn Coral SQL 翻译实现原理2025-04-09
LinkedIn Coral 编译&SQL翻译使用2025-03-07
H2 Database 事务隔离性实现原理2024-11-12
分类
  • ADB1
  • AI1
  • Concurrent2
  • Coral2
  • Data Structure1
  • Docker1
  • Dubbo7
  • H29
标签
Redis Narayana Database Dubbo spring H2 Percolator Docker Jmeter Zookeeper Ubuntu Omid Tomcat Otter Data Structure springboot Coral MySQL Termux Linux Transaction Hotspot Paddle Concurrent Ubuntu Desktop git Maven SpringBoot Android ADB SQL-Parse ShardingSphere Tool Spring
归档
  • 七月 2025 2
  • 四月 2025 1
  • 三月 2025 1
  • 十一月 2024 1
  • 十月 2024 4
  • 九月 2024 2
  • 八月 2024 2
  • 七月 2024 5
网站信息
文章数目 :
80
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2020 - 2025 By flyingzc