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

sharding官网

https://shardingsphere.apache.org/document/legacy/3.x/document/cn/overview/

  1. 基于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的更多相关文章

  1. 利用Sharding-Jdbc实现分表

    你们团队使用SpringMVC+Spring+JPA框架,快速开发了一个NB的系统,上线后客户订单跟雪花一样纷沓而来. 慢慢地,你的心情开始变差,因为客户和产品的抱怨越来越频繁,抱怨的最多的一个问题就 ...

  2. 利用sharding-jdbc分库分表

    sharding-jdbc是当当开源的一款分库分表的数据访问层框架,能对mysql很方便的分库.分表,基本不用修改原有代码,只要配置一下即可,完整的配置参考以下内容: <?xml version ...

  3. 当当开源sharding-jdbc,轻量级数据库分库分表中间件

    近期,当当开源了数据库分库分表中间件sharding-jdbc. Sharding-JDBC是当当应用框架ddframe中,从关系型数据库模块dd-rdb中分离出来的数据库水平分片框架,实现透明化数据 ...

  4. 解读分库分表中间件Sharding-JDBC

    [编者按]数据库分库分表从互联网时代开启至今,一直是热门话题.在NoSQL横行的今天,关系型数据库凭借其稳定.查询灵活.兼容等特性,仍被大多数公司作为首选数据库.因此,合理采用分库分表技术应对海量数据 ...

  5. 【源码解析】Sharding-Jdbc中的算法

    Sharding-jdbc中的很多地方涉及到算法,比如主从配置这块.分库分表这块.本文主要从源码角度介绍下,目前主要包含哪些算法,以及这些算法的内容. 一.读写分离(主从配置) 这块的代码主要在cor ...

  6. 学习sharding-jdbc 分库分表扩展框架

    先丢代码地址 https://gitee.com/a247292980/sharding-jdbc 再丢pom.xml的dependency <properties> <projec ...

  7. Sharding-jdbc实现分库分表

    首先在pom文件中引入需要的依赖 <dependency> <groupId>io.shardingjdbc</groupId> <artifactId> ...

  8. 【源码解析】Sharding-Jdbc的执行过程(一)

    一.ShardingContext 在Sharding-Jdbc中,我们其实需要抓住一个核心类,也就是ShardingContext,分片上下文,里面定义了下面几个内容: @RequiredArgsC ...

  9. 【源码解析】Sharding-Jdbc模块分析

    最新的2.0版本的Sharding-Jdbc版本,由于需要支持动态配置加载,所以最新的模块信息如下: |-sharding-jdbc |-sharding-jdbc-core |-api |-cons ...

  10. spring boot sharding-jdbc实现分佈式读写分离和分库分表的实现

    分布式读写分离和分库分表采用sharding-jdbc实现. sharding-jdbc是当当网推出的一款读写分离实现插件,其他的还有mycat,或者纯粹的Aop代码控制实现. 接下面用spring ...

随机推荐

  1. MFC入门示例之列表框(CListControl)

    初始化: 1 //初始化列表 2 m_list.ModifyStyle(LVS_TYPEMASK, LVS_REPORT); //报表样式 3 m_list.InsertColumn(0, TEXT( ...

  2. [笔记] Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting

    原文地址:https://arxiv.org/abs/2012.07436 源码地址:https://github.com/zhouhaoyi/Informer2020

  3. Reids安全加固

    目录 一.简介 二.加固方案 一.简介 Redis 因配置不当存在未授权访问漏洞,可以被攻击者恶意利用. 在特定条件下,如果Redis以root身份运行,黑客可以给root账号写入SSH公钥文件,直接 ...

  4. JuiceFS 缓存策略详解

    对于一个由对象存储和数据库组合驱动的文件系统,缓存是本地客户端与远端服务之间高效交互的重要纽带.读写的数据可以提前或者异步载入缓存,再由客户端在后台与远端服务交互执行异步上传或预取数据.相比直接与远端 ...

  5. Iphone开源项目汇总

    扫描wifi信息: http://code.google.com/p/uwecaugmentedrealityproject/ http://code.google.com/p/iphone-wire ...

  6. Table.AlternateRows删除间隔….Alternate…(Power Query 之 M 语言)

    数据源: "姓名""基数""个人比例""个人缴纳""公司比例""公司缴纳"&qu ...

  7. 去除指定….RemoveMatching…(Power Query 之 M 语言)

    表去除指定行: =Table.RemoveMatchingRows( 表, 列表, "指定列") 表中指定列中与列表中相同的行会被去除 表只有一列时,第三参数可以缺省 示例1:&q ...

  8. 自定义日历(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 日历有三种:标准日历.24小时日历和夜班日历. 但这三种在现实中远远不够用,别的不说,就说那个标准日历,默认是8点到12点 ...

  9. Kubernetes 集群无损升级实践 转至元数据结尾

    一.背景 活跃的社区和广大的用户群,使 Kubernetes 仍然保持3个月一个版本的高频发布节奏.高频的版本发布带来了更多的新功能落地和 bug 及时修复,但是线上环境业务长期运行,任何变更出错都可 ...

  10. Qt5设置lineEdit正则表达式

    说明 本文演示Qt 版本: qt5.14 一个例子 下面的代码中演示 输入框只能输入 冒号.A-F.a-f,数字0~9,最长输入64个字符 /// 设置验证 auto le_set_check = [ ...