avatar
文章
81
标签
35
分类
28
主页
归档
标签
分类
关于我
flyingzc's blog
主页
归档
标签
分类
关于我

flyingzc's blog

Narayana 事务恢复流程
发表于2023-12-12|Narayana
Narayana 事务恢复流程总体流程123456789101112131415恢复线程轮询1.判断是否有任务要处理2.若有任务要处理,则处理 1.获取所有配置的 recovery modules 2.遍历recovery modules,执行一阶段处理 XARecoveryModule: 执行 XA recovery 命令从 RM 中获取 prepare 状态的 XID 数组并缓存 AtomicActionRecoveryModule: 从事务日志中,获取需要恢复的 XID 数组并缓存 3.遍历recovery modules,执行二阶段处理 AtomicActionRecoveryModule: 1.根据状态判断是否需要执行二阶段的 commit 或 rollback 2.清理事务 recovery 日志 XARecoveryModule: ...
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 -...
1…456…9
avatar
flyingzc
不积跬步无以至千里
不积小流无以成江海
文章
81
标签
35
分类
28
Follow Me
公告
FlyingZC's Blog
最新文章
ShardingSphere JDBC 使用 Druid 连接池 ResultSet 内存泄露分析2025-07-01
Jmeter 压测 ShardingSphere2025-07-01
Maven Shade 插件替换 Calcite Jar 包 class 文件2025-07-01
LinkedIn Coral SQL 翻译实现原理2025-04-09
LinkedIn Coral 编译&SQL翻译使用2025-03-07
分类
  • ADB1
  • AI1
  • Concurrent2
  • Coral2
  • Data Structure1
  • Docker1
  • Druid1
  • Dubbo7
标签
Jmeter Hotspot Spring Maven Data Structure Druid ShardingSphere springboot SQL-Parse H2 Dubbo Omid Android Termux Narayana Tomcat Transaction Otter spring SpringBoot Percolator git Zookeeper Ubuntu Desktop Linux Coral Tool Database ADB Paddle MySQL Redis Docker Concurrent Ubuntu
归档
  • 七月 2025 3
  • 四月 2025 1
  • 三月 2025 1
  • 十一月 2024 1
  • 十月 2024 4
  • 九月 2024 2
  • 八月 2024 2
  • 七月 2024 5
网站信息
文章数目 :
81
本站访客数 :
本站总浏览量 :
最后更新时间 :
©2020 - 2025 By flyingzc