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个属性类

//分片属性配置
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的截图显示不完整整句的内容如下

masterSlaveRouter = new MasterSlaveRouter(connection.getMasterSlaveDataSource().getMasterSlaveRule(),
connection.getMasterSlaveDataSource().getShardingProperties().<Boolean>getValue(ShardingPropertiesConstant.SQL_SHOW));

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

Sharding-Jdbc源码探究-读写分离的更多相关文章

  1. Vue源码探究-源码文件组织

    Vue源码探究-源码文件组织 源码探究基于最新开发分支,当前发布版本为v2.5.17-beta.0 Vue 2.0版本的大整改不仅在于使用功能上的优化和调整,整个代码库也发生了天翻地覆的重组.可见随着 ...

  2. Mybatis日志源码探究

    一.项目搭建 1.pom.xml <dependencies> <dependency> <groupId>log4j</groupId> <ar ...

  3. spring-cloud-sleuth+zipkin源码探究

    1. spring-cloud-sleuth+zipkin源码探究 1.1. 前言   粗略看了下spring cloud sleuth core源码,发现内容真的有点多,它支持了很多类型的链路追踪, ...

  4. spring-boot-2.0.3之quartz集成,数据源问题,源码探究

    前言 开心一刻 着火了,他报警说:119吗,我家发生火灾了. 119问:在哪里? 他说:在我家. 119问:具体点. 他说:在我家的厨房里. 119问:我说你现在的位置. 他说:我趴在桌子底下. 11 ...

  5. Vue源码探究-全局API

    Vue源码探究-全局API 本篇代码位于vue/src/core/global-api/ Vue暴露了一些全局API来强化功能开发,API的使用示例官网上都有说明,无需多言.这里主要来看一下全局API ...

  6. Vue源码探究-事件系统

    Vue源码探究-事件系统 本篇代码位于vue/src/core/instance/events.js 紧跟着生命周期之后的就是继续初始化事件相关的属性和方法.整个事件系统的代码相对其他模块来说非常简短 ...

  7. Vue源码探究-状态初始化

    Vue源码探究-状态初始化 Vue源码探究-源码文件组织 Vue源码探究-虚拟DOM的渲染 本篇代码位于vue/src/core/instance/state.js 继续随着核心类的初始化展开探索其他 ...

  8. SpringBoot读取配置文件源码探究

    1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...

  9. @Async源码探究

    1. @Async源码探究 1.1. 上代码 @SpringBootApplication @EnableAsync public class SpringbootLearnApplication { ...

随机推荐

  1. v8 编译 时长3小时

  2. python--微信小程序“跳一跳‘外挂

    参考网站:http://blog.csdn.net/LittleBeautiful/article/details/78955792 0x00:准备工具: Windows 10: 一个安卓真机 pyt ...

  3. 代码审计-md5()函数

    <?php error_reporting(0); $flag = 'flag{test}'; if (isset($_GET['username']) and isset($_GET['pas ...

  4. JDOJ 1770 埃及分数

    JDOJ 1770: 埃及分数 https://neooj.com/oldoj/problem.php?id=1770 Description 分子均为1的分数叫做埃及分数,因为古代埃及人在进行分数运 ...

  5. Java中的 Invalid character constant(无效的字符常数)

    将双引号误写成单引号,会出现这个错误. 1 package dftpkg; 2 3 public class Test { 4 5 public static void main(String[] a ...

  6. [BZOJ1864][CODEVS2462]三色二叉树

    题目描述 Description 一棵二叉树可以按照如下规则表示成一个由0.1.2组成的字符序列,我们称之为“二叉树序列S”: |-0  表示该树没有子节点 S = |-1S1 表示该树有一个子节点, ...

  7. 数据结构——顺序队列(sequence queue)

    /* sequenceQueue.c */ /* 顺序队列 */ #include <stdio.h> #include <stdlib.h> #include <std ...

  8. public.js

    //通过id名称获取元素对象 function getid(idName){ return document.getElementById(idName); } //随机获取min-max的随机整数 ...

  9. Codeforces Round #545 (Div. 2) 交互 + 推公式

    https://codeforces.com/contest/1138/problem/F 题意 有一条长为t的链,一个长为c的环,定义终点为链和环相连环上的第一个点,现在有10个人在起点,你每次可以 ...

  10. Python例题集

    例题1:任意输入一组数据比较其最大值并记录输入的数据个数. 源代码: def max(*a): m=a[0] i=0 for x in a: i+=1 if x>m: m=x print('参数 ...