ShardingJDBC
ShardingJDBC的核心流程主要分成六个步骤,分别是:SQL解析->SQL优化->SQL路由->SQL改写->SQL执行->结果归并,流程图如下:

sharding官网
https://shardingsphere.apache.org/document/legacy/3.x/document/cn/overview/
- 基于ShardingJDBC的读写分离
maven依赖配置
<dependency>
<groupId>io.shardingsphere</groupId>
<artifactId>sharding-jdbc-spring-boot-starter</artifactId>
<version>3.0.0.M3</version>
</dependency>
数据源配置
#数据源名称,多数据源以逗号分隔
sharding.jdbc.datasource.names=ds-0,ds-1,ds-2
#未配置分片规则的表将通过默认数据源定位-适用于单库单表,该表无需配置分片规则
spring.shardingsphere.sharding.default-data-source-name=ds0
#ds-0
sharding.jdbc.datasource.ds-0.type=org.apache.commons.dbcp2.BasicDataSource
#sharding.jdbc.datasource.ds-0.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.ds-0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-0.url=jdbc:mysql://192.168.237.162:3306/license?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
sharding.jdbc.datasource.ds-0.username=root
sharding.jdbc.datasource.ds-0.password=admindev123$%^
#ds-1
sharding.jdbc.datasource.ds-1.type=org.apache.commons.dbcp2.BasicDataSource
#sharding.jdbc.datasource.ds-1.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.ds-1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-1.url=jdbc:mysql://192.168.237.162:3307/license?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
sharding.jdbc.datasource.ds-1.username=root
sharding.jdbc.datasource.ds-1.password=admindev123$%^
#ds-2
sharding.jdbc.datasource.ds-2.type=org.apache.commons.dbcp2.BasicDataSource
#sharding.jdbc.datasource.ds-1.type=com.zaxxer.hikari.HikariDataSource
sharding.jdbc.datasource.ds-2.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-2.url=jdbc:mysql://192.168.237.162:3308/license?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
sharding.jdbc.datasource.ds-2.username=root
sharding.jdbc.datasource.ds-2.password=admindev123$%^
sharding.jdbc.config.masterslave.load-balance-algorithm-type=round_robin
sharding.jdbc.config.masterslave.name=ms
sharding.jdbc.config.masterslave.master-data-source-name=ds-0
sharding.jdbc.config.masterslave.slave-data-source-names=ds-2,ds-1
#是否开启SQL显示,默认值: false
spring.shardingsphere.props.sql.show= true
1主2从数据库测试

查询

新增

于ShardingJDBC的单库分片
#数据源名称,多数据源以逗号分隔
#这里是给取的别名,下面配置要使用
sharding.jdbc.datasource.names=ds-0
#未配置分片规则的表将通过默认数据源定位-适用于单库单表,该表无需配置分片规则
#spring.shardingsphere.sharding.default-data-source-name=ds0
#ds-0
sharding.jdbc.datasource.ds-0.type=org.apache.commons.dbcp2.BasicDataSource
sharding.jdbc.datasource.ds-0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds-0.url=jdbc:mysql://192.168.237.162:3306/license?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=UTF-8
sharding.jdbc.datasource.ds-0.username=root
sharding.jdbc.datasource.ds-0.password=admindev123$%^
#分表相关配置 note是我数据库要分表的表前缀,ds.f_licensecreatorparams_000$->{0..1}这里表示ds数据库中的f_licensecreatorparams_0000,f_licensecreatorparams_0001两个表
sharding.jdbc.config.sharding.tables.f_licensecreatorparams.actual-data-nodes=ds-0.f_licensecreatorparams_000$->{0..2}
## 配置分表策略
## 配置分片算法
#指定f_licensecreatorparams表中主键的生成策略 SNOWFLAKE:雪花算法,随机生成主键Id
sharding.jdbc.config.sharding.tables.f_licensecreatorparams.key-generator-column-name=id
spring.shardingsphere.sharding.tables.f_licensecreatorparams.key-generator.type=SNOWFLAKE
# 指定分片的策略
# 分片健
sharding.jdbc.config.sharding.tables.f_licensecreatorparams.table-strategy.inline.sharding-column=id
# 分片算法(分了3张表 id % 3)
sharding.jdbc.config.sharding.tables.f_licensecreatorparams.table-strategy.inline.algorithm-expression=f_licensecreatorparams_000$->{id % 3}
#sharding.jdbc.config.sharding.binding-tables=f_licensecreatorparams
出现的问题解决
问题一:
Springboot 的 autoconfiguration 中 datasource 与 shardingjdbc 的datasource 冲突,导致sharding jdbc 的datasource 注入失败
解决办法:
在配置文件(application.yml)中设置允许 重复名称 bean 覆盖,这样让后面配置的sharding jdbc 的datasource 覆盖掉 springboot 的 autoconfiguration的datasource
spring.main.allow-bean-definition-overriding: true

ShardingJDBC的更多相关文章
- 利用Sharding-Jdbc实现分表
你们团队使用SpringMVC+Spring+JPA框架,快速开发了一个NB的系统,上线后客户订单跟雪花一样纷沓而来. 慢慢地,你的心情开始变差,因为客户和产品的抱怨越来越频繁,抱怨的最多的一个问题就 ...
- 利用sharding-jdbc分库分表
sharding-jdbc是当当开源的一款分库分表的数据访问层框架,能对mysql很方便的分库.分表,基本不用修改原有代码,只要配置一下即可,完整的配置参考以下内容: <?xml version ...
- 当当开源sharding-jdbc,轻量级数据库分库分表中间件
近期,当当开源了数据库分库分表中间件sharding-jdbc. Sharding-JDBC是当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架,实现透明化数据 ...
- 解读分库分表中间件Sharding-JDBC
[编者按]数据库分库分表从互联网时代开启至今,一直是热门话题.在NoSQL横行的今天,关系型数据库凭借其稳定.查询灵活.兼容等特性,仍被大多数公司作为首选数据库.因此,合理采用分库分表技术应对海量数据 ...
- 【源码解析】Sharding-Jdbc中的算法
Sharding-jdbc中的很多地方涉及到算法,比如主从配置这块.分库分表这块.本文主要从源码角度介绍下,目前主要包含哪些算法,以及这些算法的内容. 一.读写分离(主从配置) 这块的代码主要在cor ...
- 学习sharding-jdbc 分库分表扩展框架
先丢代码地址 https://gitee.com/a247292980/sharding-jdbc 再丢pom.xml的dependency <properties> <projec ...
- Sharding-jdbc实现分库分表
首先在pom文件中引入需要的依赖 <dependency> <groupId>io.shardingjdbc</groupId> <artifactId> ...
- 【源码解析】Sharding-Jdbc的执行过程(一)
一.ShardingContext 在Sharding-Jdbc中,我们其实需要抓住一个核心类,也就是ShardingContext,分片上下文,里面定义了下面几个内容: @RequiredArgsC ...
- 【源码解析】Sharding-Jdbc模块分析
最新的2.0版本的Sharding-Jdbc版本,由于需要支持动态配置加载,所以最新的模块信息如下: |-sharding-jdbc |-sharding-jdbc-core |-api |-cons ...
- spring boot sharding-jdbc实现分佈式读写分离和分库分表的实现
分布式读写分离和分库分表采用sharding-jdbc实现. sharding-jdbc是当当网推出的一款读写分离实现插件,其他的还有mycat,或者纯粹的Aop代码控制实现. 接下面用spring ...
随机推荐
- linux 彻底卸载mysql
1. 停止 mysql 服务: systemctl stop mysqld.service 2. yum remove mysql (因为 之前是通过 yum -y install 方式安装的 ) ...
- Appium获取toast消息遇到的问题(一)
一.运行错误 Android获取toast,需要在参数里设置automationName:Uiautomator2 1 # 设置设备的信息 2 desired_caps = { 3 'platform ...
- jstl中的choose标签
<%@ page contentType="text/html;charset=UTF-8" language="java" %><%@ ta ...
- jupyter的使用技巧
具体安装教程参见上一篇博客. 1.有几种格式code,编码模式:markdown注释格式: 2.如果出现no module named 'XX' ,需要在anaconda prompt中使用conda ...
- SQL 基础知识终极指南
什么是数据库? 数据库是以电子方式从系统中存储和检索的大量数据集合. 存储在数据库中的结构化数据被处理.操纵.控制和更新以执行各种操作. 行业中使用的一些流行数据库是 Oracle.MySQL.Pos ...
- mysql的事务详解
事务及其ACID属性 事务是由一组SQL语句组成的逻辑处理单元,事务具有以下4个属性,通常简称为事务的ACID属性. 原子性(Atomicity) :事务是一个原子操作单元,其对数据的修改,要么全都执 ...
- Windows10下mysql 8.0.19 安装配置方法图文教程
第一步 下载安装包: 官网 毕竟是甲骨文公司的产品,去官网下真的慢! 这里有两个供选择的,我建议选第一个(因为我先下了第二个,结果失败了,不知道为什么总是出错.) 下载完自行选择路径解压就可以了. 第 ...
- CF74A Room Leader 题解
Content 一场 CF 比赛有 \(n\) 个人,有 ABCDE 五道题目.在比赛过程中,参赛者还可以随时互相攻击,成功一次加 \(100\) 分,失败一次扣 \(50\)分,已知第 \(i\) ...
- CF1557B Moamen and k-subarrays 题解
Content 给定一个大小为 \(n\) 的数组.你可以将其分为 \(k\) 个子数组,并按照每个子数组的字典序重新排列这些子数组,再顺次拼接,得到一个新的数组.问是否存在一种划分子数组的方案,使得 ...
- CF166A Rank List 题解
Content 有 \(n\) 个元素,第 \(i\) 个元素包含两个值 \(a_i,b_i\),按照以下规则排序: 如果对于 \(i\neq j\) 有 \(a_i\neq a_j\),则按照 \( ...