Milo源码解析(三)

Milo的初始化

上一篇文章我们已经介绍了Milo里面的测试样例,并且执行了测试样例,得到了我们想要的结果,订单服务、库存服务和账户服务数据保持一致。细心的朋友会发现我们项目引入的milo框架会在application.yml配置的milo-tcc数据库参数对应的库里面生成对应的事务日志表。
在这里插入图片描述
在这里插入图片描述
表的名称为milo_{model-name}_log,这个model-name就是application.yml里面milo-tcc配置的model-name参数项。这些都是在Milo框架初始化的时候就已经生成。下面我们解析Milo的初始化过程,而Milo框架的入口就是milo-spring-cloud-starter模块。
在这里插入图片描述
milo-spring-cloud-starter在resources资源文件夹里面定义了EnableAutoConfiguration的配置类,EnableAutoConfiguration的作用简单来说就是可以在项目启动的时候可以自动配置这个Bean,并且这个属性可以在依赖项目的application.yml中配置。
在这里插入图片描述
MiloAutoConfiguration的构造方法注入了MiloConfigProperties这个对象,MiloConfigProperties将依赖项目的application.yml中配置引入到我们的Milo框架。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
同时MiloAutoConfiguration配置对象里面还会创建MiloTransactionBootstrap,MiloTransactionBootstrap对象的创建依赖MiloBootstrapService和MiloConfigProperties这两个对象。我们进入到MiloTransactionBootstrap
在这里插入图片描述
MiloTransactionBootstrap实现了ApplicationContextAware接口,从而可以拿到ApplicationContext,并保存到SpringBeanUtils中,同时调用miloBootstrapService.initMiloTccTransaction(miloConfig);
在这里插入图片描述
MiloBootstrapService依赖了MiloLogDaoService,通过MiloLogDaoService去初始化连接池HikariDataSource,创建数据库表milo_xxx_log。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从我们执行样例项目的日志看到,Milo的初始化过程还包括了一个定时任务的初始化
在这里插入图片描述
所以除了初始化数据库之外,milo框架还初始化了MiloTransactionLogHandleScheduled,MiloTransactionLogHandleScheduled是事务处理异常的自恢复定时任务,是Milo框架的重要组成部分,后面会详细分析MiloTransactionLogHandleScheduled是如何处理事务日志达到自恢复的。
在这里插入图片描述

我的公众号

Alt

发布了122 篇原创文章 · 获赞 127 · 访问量 93万+

猜你喜欢

转载自blog.csdn.net/u010739551/article/details/102618888