目标
每组选择自己分析的功能模块,可以重复,每人完成第一篇源码学习分析文档。
首先,要了解ShardingSphere的整体架构,以及各个模块的大致功能,对各个模块的重要程度有个比较和评分;
接着,选择其中最核心、最关键的模块(也可以是自己最感兴趣的,但开始阶段,还是建议从最核心模块入手),着手分析各个功能点是如何实现的,并记录过程,输出总结。
分析步骤
- 明确本次阅读的目标,带着问题去阅读源码,如:JDBC里的分库逻辑是如何实现的?
- 找到代码执行入口
- 顺着每一步方法实现往下跟
- debugger项目,验证猜想
- 记录过程,代码的关键处添加注释,加深印象
解读源码
目标一:探索ShardingSphere-JDBC中一条SQL语句是如何一步步执行的
代码执行入口
基于该系列的第一步:juejin.cn/post/699965… ,选择了样例中的org.apache.shardingsphere.example.sharding.raw.jdbc.ShardingRawJavaConfigurationExample(熟悉点,好上手),shardingType选择了SHARDING_DATABASES(分库)
关键代码
debugger验证猜想
记录执行流程
总结下来,SQL从statement到了executor
目标二:探索ShardingSphere-JDBC中分库的逻辑是如何实现的
基于目标一的几个现象
F9,让程序跳到下一个断点:
可以看到:数据库发生了变化,变化的这一步如何实现呢?猜想是在这一步实现:
DataSourceMetaData dataSourceMetaData = getDataSourceMetaData(jdbcExecutionUnit.getStorageResource().getConnection().getMetaData());
复制代码
继续跟进代码实现
debugger验证猜想
总结
个人觉得今天的收获:
- 一开始就明确目标——这次阅读的目标是什么,要搞懂哪一块问题或者知识点
- 添加注释——在关键代码上添加注释,有助于记忆和后续的回顾
- 画流程图梳理——相当于整理和巩固,画的过程也能帮助自己理清思路,特别是那种调用特别深的实现,留一份流程图,过段时间重新看,能快速回忆起来
- 记录和总结——记录下自己找问题花了多少时间,过程里走了哪些弯路,有没有可以改进的地方,比如技巧方法上。因为不可否认,扒源码是个特别费时费力的事情,在这上面如果能做到快速高效,绝对功力大增