zoukankan      html  css  js  c++  java
  • [zebra源码]分库分表数据源ShardDataSource初始化过程

    ShardDataSource 间接实现了 jdbc api 的 DataSource 接口

    它持有多个GroupDataSource,存于 dataSourcePool 的 map 中  ,dataSourcePool 由数据源仓储 DataSourceRepository 初始化

    ConfigService 是 zebra 配置获取的接口,包含本地配置、远程配置和zk配置这几个实现 也可以注册spi的方式自定义配置获取逻辑

    ShardRouter 为分片路由器,负责根据分片键和路由规则定位到目标分库和分表, 唯一实现类 DefaultShardRouter ; 它由 RouterBuilder 构造器负责解析 configService 拉取的配置构建而成

    初始化过程 ShardDatasource#init()

    1. ConfigServiceFactory 根据配置的类型(本地配置文件/zk) 创建具体的ConfigService实例
    2. 传入configService,实例化routerFactory : RouteBuilder ,它借助 configService获取路由配置并解析
    3. 初始化 cat 过滤器,用于上报监控
    4. 如果有自定义过滤器,则把这些封装到一个 DefaultJdbcFilterChain 责任链里边 依次初始化
    5. 正式开始初始化 ShardDatsource#initInternal()
      1. 通过 routerFactory 构建出 ShardRouter
      2. DataSourceRepository.getInstance()
      3. 初始化dataSourceRepository ,内部会挨个初始化 GroupDataSource
      4. GroupDataSource 初始化sql执行线程池 SQLThreadPoolExecutor, 如果是读写分离的则会创建1个读1个写 总共2个线程池
      5. SQLParser.init(); 初始化 sql 解析器, 基于 alibabali.druid ast ; 解析一下 "select * from Test"

    本文来自博客园,作者:mushishi,转载请注明原文链接:https://www.cnblogs.com/mushishi/p/15022059.html

  • 相关阅读:
    AI编辑SVG格式的相关问题
    HTML里的id等属性命名需要注意
    canvas绘图动画细节
    触控获取坐标判断滑动方向
    CSS3卡片旋转效果
    使用CURL下载远程文件保存到服务器
    微信JS-SDK应用DEMO
    布局转换:文档流->绝对定位
    ThinkPHP缓存微信公众号access_token
    JAVA JSP笔记
  • 原文地址:https://www.cnblogs.com/mushishi/p/15022059.html
Copyright © 2011-2022 走看看