前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Sharding-Jdbc源码探究-读写分离

Sharding-Jdbc源码探究-读写分离

作者头像
老梁
发布2019-08-21 17:27:54
8510
发布2019-08-21 17:27:54
举报

1. Sharding-Jdbc源码探究-读写分离

1.1. 主入口

  • 找到源码入口
  • 这一个类围绕了springboot配置属性的加载,加载了spring.shardingsphere.datasource.names配置的数据源,遍历存储到了Map容器
  • 可以看到它还有个@ConditionalOnProperty(prefix = "spring.shardingsphere", name = "enabled", havingValue = "true", matchIfMissing = true)属性,说明只要引用了sharing-jdbc的pom,默认就会直接初始化加载
  • 此类总共负责加载4个属性类
代码语言:javascript
复制
//分片属性配置
private final SpringBootShardingRuleConfigurationProperties shardingProperties;
//主从属性配置
private final SpringBootMasterSlaveRuleConfigurationProperties masterSlaveProperties;
//加密属性配置
private final SpringBootEncryptRuleConfigurationProperties encryptProperties;
//额外属性配置(比如sql是否打印)
private final SpringBootPropertiesConfigurationProperties propMapProperties;

经过该文件的查看,我们大概知道了配置属性是从哪里加载的和加载的过程

1.2. props

主从配置中主从的属性逗号理解,也好找到使用的地方,对props是在哪且如何使用的呢? 我找到了这个类:

是不是很熟悉sql.show,没错这是官网例子中的sql显示配置,全称配置是spring.shardingsphere.props.sql.show = true,说明了还有其它配置可以在这个类找到,比如最大线程数,最大请求连接数,是否简单sql等等,可以自己看看,一般都是用默认值

1.3. 数据源分离

  • 主从环境的,具体选择哪个datasource呢?

选完数据源,之后就是在mybatis包里执行具体的解析查询过程

1.4. sql.show

这里就看看sql.shows是如何发挥作用的,紧接着上述类,进入route方法

在route包中对是否打印这个sql做了判断,而参数的来源就是showSQL,而这个参数什么时候填进来的呢?1.3的截图显示不完整整句的内容如下

代码语言:javascript
复制
masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule(),
                connection.getMasterSlaveDataSource().getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW));

明白了吧,在MasterSlaveRouter类实例化的时候,通过ShardingPropertiesConstant.SQL_SHOW注入进来了,而ShardingPropertiesConstant这个类1.2的时候已经提到过了

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-08-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Sharding-Jdbc源码探究-读写分离
    • 1.1. 主入口
      • 1.2. props
        • 1.3. 数据源分离
          • 1.4. sql.show
          相关产品与服务
          容器服务
          腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档