Sharding-Jdbc源码探究-读写分离
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源码探究-读写分离的更多相关文章
- Vue源码探究-源码文件组织
Vue源码探究-源码文件组织 源码探究基于最新开发分支,当前发布版本为v2.5.17-beta.0 Vue 2.0版本的大整改不仅在于使用功能上的优化和调整,整个代码库也发生了天翻地覆的重组.可见随着 ...
- Mybatis日志源码探究
一.项目搭建 1.pom.xml <dependencies> <dependency> <groupId>log4j</groupId> <ar ...
- spring-cloud-sleuth+zipkin源码探究
1. spring-cloud-sleuth+zipkin源码探究 1.1. 前言 粗略看了下spring cloud sleuth core源码,发现内容真的有点多,它支持了很多类型的链路追踪, ...
- spring-boot-2.0.3之quartz集成,数据源问题,源码探究
前言 开心一刻 着火了,他报警说:119吗,我家发生火灾了. 119问:在哪里? 他说:在我家. 119问:具体点. 他说:在我家的厨房里. 119问:我说你现在的位置. 他说:我趴在桌子底下. 11 ...
- Vue源码探究-全局API
Vue源码探究-全局API 本篇代码位于vue/src/core/global-api/ Vue暴露了一些全局API来强化功能开发,API的使用示例官网上都有说明,无需多言.这里主要来看一下全局API ...
- Vue源码探究-事件系统
Vue源码探究-事件系统 本篇代码位于vue/src/core/instance/events.js 紧跟着生命周期之后的就是继续初始化事件相关的属性和方法.整个事件系统的代码相对其他模块来说非常简短 ...
- Vue源码探究-状态初始化
Vue源码探究-状态初始化 Vue源码探究-源码文件组织 Vue源码探究-虚拟DOM的渲染 本篇代码位于vue/src/core/instance/state.js 继续随着核心类的初始化展开探索其他 ...
- SpringBoot读取配置文件源码探究
1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...
- @Async源码探究
1. @Async源码探究 1.1. 上代码 @SpringBootApplication @EnableAsync public class SpringbootLearnApplication { ...
随机推荐
- 代码审计-sha()函数比较绕过
<?php $flag = "flag"; if (isset($_GET['name']) and isset($_GET['password'])) { var_dump ...
- nginx 常见的问题
1.server匹配优先级 nginx 读取文件名是按照文件排序优先读取的顺序 对与一样的server 优先使用先读取到的 2.location匹配优先级 = 进行普通字符精确匹配,也就是 ...
- Dockerfile解析(八)
一.Dockerfile是什么 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 1. 构建的步骤 运行容器:docker run 构建新的镜像:docker ...
- AI AND THE BOTTOM LINE: 15 EXAMPLES OF ARTIFICIAL INTELLIGENCE IN FINANCE
https://builtin.com/artificial-intelligence/ai-finance-banking-applications-companies f there's one ...
- pycharm访问mysql数据库
不需要像eclipse那样添加驱动包,在pycharm里面下载一个pymysql包即可. 然后链接自己电脑的mysql并进行访问即可. 源码如下(参考博客:https://blog.csdn.net/ ...
- Python进阶-XIV 面向对象初步
1.面向对象的引入 def Person(*args): ''' 定义一个人 :param args: 人的属性 :return: 人的所有属性的字典 ''' info = {} info['name ...
- 【java】获取昨天/今天/明天日期
昨天: SimpleDateFormat sdf=new SimpleDateFormat("yyyMMdd"); Calendar calendar = new Gregoria ...
- ESP8266 LUA脚本语言开发: 准备工作-LUA开发是怎么来的
前言 当前8266有各种开发 1.在官方已经封装好的C库上开发(SDK开发) 2.官方在SDK的基础上封装的AT指令程序(AT指令开发) 3.在SDK的基础上嵌入脚本语言(Lua,Python等开发方 ...
- 3.GO-项目结构、包访问权限、闭包和值传递引用传递
3.1.goland中项目结构 (1)在goland中创建标准Go项目 (2)goland配置 创建项目Learn-Go file-settings-go-GOPATH-添加 在项目目录下创建src目 ...
- 【day03】Xhtml
一.HTML公共属性 1. title 提示 2. class 3. id 4. style 说明:除了 html,head,body,link,meta外其他标记都可使用的属性 二.表单 1 ...