默默学Sharding-Sphere(五)

从本篇开始,开始对项目和源码进行一个分析学习。可能存在不准确的地方,望指出。基于版本3.1.0-M1版本。

项目结构

在这里插入图片描述
从项目模块拆分和依赖关系来看,大致我们可以看出各模块的主要职责和特点。
sharding-core:核心模块
sharding-transaction-core:事务模块核心
sharding-jdbc-core:jdbc核心集成模块
sharding-transaction-2pc-spi:2阶段提交事务SPI抽象
sharding-transaction-2pc-xa:XA实现
sharding-orchestration-core:暂还没看,暂时理解为数据库治理核心
sharding-jdbc-orchestraction:集成数据库治理
sharding-opentracing:open tracing集成
sharding-orchestration-reg-api:治理API
sharding-orchestration-reg-etcd:基于etcd实现的治理
sharding-orchestration-reg-zookeeper-curator:基于zookeeper实现的治理
sharding-proxy: sharding proxy模式
注:这里的依赖只是代码模块的依赖,并不决定部署的情况。
接下来,我们会各个模块依次分析,当然可能没面面俱到,所以还是建议大家从代码入手。

sharding-sql-test

这个模块比较特别,用于静态化一些SQL,用于其他模块进行测试。从代码我们可以看出,主要是依赖jdk xml解析和加载,然后提供API共查询。
在这里插入图片描述
SQLCaseLoader加载xml文件,解析成实体模型SQLCase对象。
AntlrSQLCaseLoader加载基于antlr实现的语言解析的复杂SQL,解析成实体模型SQLCase对象。
核心代码主要在SQLCaseLoader,功能比较简单,这里review代码后,觉得几个可以学习的地方,知道的大家可以忽略:

  1. Lombok 通过注解在编译期帮我们注入代码
    个人觉得这是一种非常优雅编码的方式,其中包括:
    @Getter 生成属性get方法
    @Setter 生成属性set方法
    @ToString 生成toString方法
    @EqualsAndHashCode 生成equals和hashcode方法
    @AllArgsConstructor 生成所有参数的构造方法
    @NoArgsConstructor 无参构造方法
    @RequiredArgsConstructor 必要参数构造方法,即final属性
    @Data 集合:Getter 、Setter 、ToString 、EqualsAndHashCode 、NoArgsConstructor
    @Slf4j 生成log,在方法内直接使用即可
    @Log 同上,只是使用的是java.util.logging.Logger
    @Builder builder模式构造对象
    @Cleanup 自动关闭流,等价于jdk1.7中的try with resource
    @NonNull 参数非空,否则抛空指针异常
    @SneakyThrows 不用显示抛异常
    @Synchronized 方法同步,普通方法即对象锁,静态方法即全局锁
  2. File file = new File(SQLCasesLoader.class.getProtectionDomain().getCodeSource().getLocation().getPath());
    通过file.isFile可以判断当前class是jar包状态还是target class状态。
  3. JAXBContext.newInstance(SQLCases.class).createUnmarshaller().unmarshal(inputStream); JDK XML解析,将xml文件解析成数据实体模型。 如果大家后期学习和维护sharding-sphere代码的话,应该少不了和sharding-sql-test的补充和完善。