springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码)

一、整合sharding-jdbc

关于springboot整合sharding-jdbc官网有4种方式,而网上千篇一律都是用.properties文件。我在这里主要是用yml+bean两种方式结合,bean主要是为了实现分片键分片规则更灵活。

1.1引入maven依赖

这里有个小坑,我一开始引入是最新的sharding-jdbc和mybatis-plus的依赖,结果启动项目直接报错。所以个人不建议引用最新的包。

<dependency><groupId>org.apache.shardingsphere</groupId><artifactId>sharding-jdbc-spring-boot-starter</artifactId><version>4.0.0-RC1</version>
</dependency>

1.2配置分库分表和读写分离(核心)

spring:shardingsphere:datasource:names: "search-center-00,search-center-00-slave,search-center-01,search-center-01-slave"search-center-00:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/search_center_00?useUnicode=true&characterEncoding=utf8&serverTimezone=UTCusername: rootpassword: 123456search-center-00-slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3307/search_center_00?useUnicode=true&characterEncoding=utf8&serverTimezone=UTCusername: rootpassword: 123456search-center-01:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/search_center_01?useUnicode=true&characterEncoding=utf8&serverTimezone=UTCusername: rootpassword: 123456search-center-01-slave:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3307/search_center_01?useUnicode=true&characterEncoding=utf8&serverTimezone=UTCusername: rootpassword: 123456sharding:master-slave-rules:search-center-00:master-data-source-name: search-center-00slave-data-source-names: search-center-00-slavesearch-center-01:master-data-source-name: search-center-01slave-data-source-names: search-center-01-slavetables:user:actual-data-nodes: search-center-$->{(0..1).collect{t ->t.toString().padLeft(2,'0')}}.user_$->{(0..1).collect{t ->t.toString().padLeft(2,'0')}}database-strategy:standard:shardingColumn: idprecise-algorithm-class-name: com.gory.searchcenter.config.DatabaseAlgorithmtable-strategy:standard:sharding-column: idprecise-algorithm-class-name: com.gory.searchcenter.config.TableAlgorithmprops:sql:show: true

names:自定义数据库名称,然后对这些名称进行具体的配置,如:url,password,username等

tables:对每个表进行分库分表。例如,这里对user表进行分库分表,

actual-data-nodes:则是user表分库分表的节点分配。

database-strategy:是分库的策略,我这里是根据id,然后通过bean方式更加灵活配置分库规则,

table-strategy:则是分表的策略,配置和分库大概一致。

master-slave-rules:设置主从实现读写分离,

DatabaseAlgorithm
public class DatabaseAlgorithm implements PreciseShardingAlgorithm<Long> {@Overridepublic String doSharding(Collection<String> databaseNames, PreciseShardingValue<Long> shardingValue) {Long shardResult = Math.abs((long) shardingValue.getValue().hashCode()) % 2;for (String databaseName : databaseNames) {String shardValue = String.format("%02d", shardResult);if (databaseName.endsWith(shardValue)){System.out.println("shardingValue:"+shardingValue+", databaseName:" + databaseName);return databaseName;}}throw new UnsupportedOperationException();}}
TableAlgorithm
public class TableAlgorithm implements PreciseShardingAlgorithm<Long> {/*** @param tableNames 有效的数据源 或者 表 的名字  tableNames 就为配置文件中的 配置的数据源信息 -> ds0 , ds1* @param shardingValue SQL 分片列 对应的实际值* @return 返回相应的表名*/@Overridepublic String doSharding(Collection<String> tableNames, PreciseShardingValue<Long> shardingValue) {Long shardResult = Math.abs((long) shardingValue.getValue().hashCode()) / 2 % 2;for (String tableName : tableNames) {String shardValue = String.format("%02d", shardResult);if (tableName.endsWith(shardValue)){System.out.println("shardingValue:"+shardingValue+", tableName:" + tableName);return tableName;}}throw new UnsupportedOperationException();}}

随便说一下,这里的分片主键id是用雪花算法设值的。你的分片键的赋值最好和你的分片规则对应上。

二、整合mybatis-plus

上一节已经说过了,引入最新的maven依赖会报错,所以我还是不建议用最新的。

2.1 引入maven依赖

<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.2.0</version>
</dependency>
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.5.1</version>
</dependency>

2.2 mybatis-plus的配置

mybatis-plus:mapper-locations: classpath:/mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

再启动类加上包扫表注解

@MapperScan({"com.gory.searchcenter.mapper"})

三、数据库主从配置

在上两节已经能完成分库分表了,但是因为数据库没设置主从,从表没有数据库,导致查询没有数据。因为此文章主要是为了学习,所以mysql的配置是在window环境的。

3.1my.ini配置

主库

#主库id不能重复

server_id=1

#开启bin-log

log_bin=E:\lib\mysql-5.7.30-winx64\master-bin.log

#mysql清除过期日志的时间与从库设置一致
expire_logs_days = 1

#设置需要同步的数据库
binlog-do-db=search_center_00
binlog-do-db=search_center_01
------------------------------------------------------------ |

从库

server_id=2

#开启bin-log

log_bin=E:\lib\mysql-5.7.30-winx64-slave\slave-bin.log

expire_logs_days = 1

#设置需要同步的数据库
binlog-do-db=search_center_00
binlog-do-db=search_center_01
------------------------------------------------------------ |

值得一提,设置多个同步表,不能用逗号隔开。

3.1 sql配置

主库

开通从服务器( Slave )访问主服务器( Master )的权限

grant replication slave on . to ‘root’@‘127.0.0.1’ identified by ‘123456’;

查看授权信息

show master status ;

从库

停止同步

stop slave;

设置主库的信息,将从库和主库联系起来

change master to
master_host=’127.0.0.1’,
master_user=’root’,
master_password=’123456’,
master_log_file=’log-bin.000008’,
master_log_pos=107;
master_log_file和master_log_pos这两个 配置是和主 服务器 show master status对应的

启动同步

start salve;

查看slave启动状态

show slave status;

如果出现,则表明,启动成功。

Slave_IO_Running:Yes

Slave_SQL_Running:Yes

四、完整的项目代码

完整的代码:https://github.com/gorylee/SearchCenter

springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码)相关推荐

  1. Sharding Sphere ~ Sharding-jdbc分库分表、读写分离

    Sharding Sphere 是什么? 1.一套开源的分布式数据库中间件解决方案 2.有三个产品:Sharding-JDBC 和 Sharding-Proxy 3.定位为关系型数据库中间件,合理在分 ...

  2. SpringBoot + Sharding JDBC,一文搞定分库分表、读写分离

    程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 30 分钟. 来自:blog.csdn.net/qq_40378034/article/details/115264837 S ...

  3. sharding分表后主键_分库分表【Sharding-JDBC】入门与项目实战

    最近项目中不少表的数据量越来越大,并且导致了一些数据库的性能问题.因此想借助一些分库分表的中间件,实现自动化分库分表实现.调研下来,发现Sharding-JDBC目前成熟度最高并且应用最广的Java分 ...

  4. sharding jdbc根据年月分表

    1.配置Maven依赖 <!--shardingsphere分表策略--> <dependency><groupId>io.shardingsphere</g ...

  5. sharding jdbc:分库、分表;读写分离;

    1 转载于:https://www.cnblogs.com/cnki/p/8835764.html

  6. ShardingSphere JDBC 分库分表 读写分离 数据加密

    简介 在上篇文章中,在本地搭建了运行环境,本地来体验下ShardingSphere JDBC的三个功能:分库分表.读写分离.数据加密 示例运行 首先把概念先捋一捋,参考下面的文档: 数据分片 读写分离 ...

  7. SpringBoot + Sharding JDBC 读写分离、分库分表

    Sharding-JDBC 最早是当当网内部使用的一款分库分表框架,到2017年的时候才开始对外开源,这几年在大量社区贡献者的不断迭代下,功能也逐渐完善,现已更名为 ShardingSphere,20 ...

  8. Spring boot + Sharding JDBC 分库分表 及 分布式事务处理

    Sharding JDBC 基础概念 Apache ShardingSphere 是一套开源的分布式数据库解决方案组成的生态圈,它由 JDBC.Proxy 和 Sidecar(规划中)这 3 款既能够 ...

  9. mybatis+shardingJdbc实现数据库读写分离和分库分表

    文章目录 一.原理介绍 二.环境准备 2.1 数据库环境 2.2 开发环境 2.2.1 pom.xml 2.2.2 建表语句 三.主要代码 3.1 实体 3.2 Mapper 3.3 Controll ...

最新文章

  1. 为 ASP.NET Datagrid 创建自定义列
  2. Oracle 原理:UNDO表空间
  3. CPU 的 ring0、ring1、ring2、ring3
  4. 结对开发四------求一维无头数组最大子数组的和
  5. 没看过这10本程序员必读烧脑经典,别说你是敲代码的
  6. 拖拽之路(四):自定义QListView实现美观的拖拽样式(拖拽不影响选中)
  7. oops 内核重启问题_OOPS面试问答
  8. 直接内存回收中的等待队列
  9. java closed_有关Java中isClosed()和isConnected()的一些误解
  10. 6-1 Numerical Summation of a Series (40分)
  11. MATLAB的水果分级系统
  12. 硅谷“钢铁侠”:最不爱钱的人,却成了最有钱的人!
  13. 生产制造管理系统MES
  14. 软件设计模式——适配器模式
  15. 新海诚没有参与制作的作品_由新海诚创作,却成为冷门的一部动漫,至今都没看懂...
  16. 她研究白酒被提名院士!而她是半导体顶级专家,却四次被拒!
  17. NFT 的洗盘交易,真的赚钱吗?
  18. 吐血整理!java跑批任务防止重复
  19. coffeescript(javascript) this 的理解
  20. 个人笔记:算法讲座3.1——地精的帽子(最长上升子序列)

热门文章

  1. 多线程----守护线程---Deamon
  2. GB/T 8170-2008 数值修约规则与极限数值的表示和判定
  3. 产品概念之2/4:三层次理论 —— 生产者主导视角的产品概念
  4. PaddleHub创意之艺术风格迁移
  5. 北京历正科技 招聘FPGA工程师
  6. xmanager连接linux7桌面,使用Xmanager连接CentOS 7远程桌面
  7. 论文研读1——对抗样本(Adversarial Example)综述(2018版)
  8. 架构师聊的四层代理和七层代理,都在聊什么?
  9. Github Pages + Hugo 搭建个人博客
  10. 计算机毕业设计JavaVue.js音乐播放器设计与实现(源码+系统+mysql数据库+lw文档)