博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SpringBoot使用Sharding-JDBC读写分离
阅读量:5891 次
发布时间:2019-06-19

本文共 1712 字,大约阅读时间需要 5 分钟。

1.有关Sharding-JDBC

本文还是基于当当网Sharding-Jdbc的依赖

这里需要特殊介绍的是,使用Sharding-JDBC进行读写分离的时候,只允许设置一个主库,从库的话可以设置多个,访问策略的话从源码上看只有两种轮询(ROUND_ROBIN)和随机(RANDOM)。

源码代码如下:

2.本文场景

由于本地环境并没有使用Mysql主从复制,只是创建了三个库,其中database0作为主库,database1和database2作为从库。主库进行增删改操作,从库进行查询操作,如下图为本文数据库的三个表。

如上图分别是三个数据库中的user表,其中master-user为database0数据库中的user表,salve-user1为database1中的user表,salve-user2为database2中的user表。

3.代码实现

本文使用SpringBoot2.0.3,SpringData-JPA,Druid连接池,和当当的sharding-jdbc。

3.1 建表SQL

创建表和数据库的SQL如下所示,这里默认在从库内分别插入了一条数据,name值分别存放dalaoyang1和dalaoyang2便于区分。

3.2 依赖文件

新建项目,依赖文件还是当当的sharding-jdbc-core依赖和druid连接池,完整pom文件代码如下所示。

3.3 配置信息

在配置信息中配置了三个数据库的信息和JPA的简单配置。

3.4 启动类

上一篇文章说到在启动类加入了@EnableAutoConfiguration去除数据库自动配置,当时也没太注意,其实可以直接在@SpringBootApplication注解上去除数据库自动配置,剩下的和上一篇一样,使用@EnableTransactionManagement开启事务,使用@EnableConfigurationProperties注解加入配置实体,启动类完整代码如下所示。

3.5 实体类和数据库操作层

User实体类。

UserRepository类。

3.6 数据库参数类

数据库配置类,Database0Config。

数据库配置类,Database1Config。

数据库配置类,Database2Config。

3.7 读写分离配置

创建一个DataSourceConfig类来设置读写分离,这里其实也与分库分表类似,也可以在分库分表的基础上进行读写分离,需要创建一个Map集合来接收从库。在创建数据源时需要传入五个参数,分别是:

•name:数据源名称

•masterDataSourceName:主库数据源名称

•masterDataSource:主数据源

•slaveDataSourceMap:从数据源集合

•strategyType:访问策略 当然,也可以使用其他方法创建数据源,本文代码如下:

3.8 Controller Controller

做为测试类,创建两个方法,save方法和getAll方法,其中:

•save方法用于测试主库的插入和修改

•getAll方法用于测试读数据 UserController类如下所示。

4.测试

4.1 测试主库

使用postman访问,控制台如图所示。

再次访问,如图。

主键冲突了,其实这是由于插入的时候使用的database0,但是查询使用的是database1和database2,但是我在从库内并没有ID是100的数据,所以JPA判定我为插入,但是数据库内缺有这样的数据。 我们接下来测试一下查询。访问

再次访问,如图。

证明从库的读取是正常的,接下来修改从库的ID为100。然后访问,查看控制台如图。

因为存在了ID为100的数据,所以SQL为修改语句。

5.源码

源码地址:https://gitee.com/dalaoyang/springboot_learn/tree/master/springboot2_shardingjdbc_dxfl

转载于:https://juejin.im/post/5cdb8706f265da03576ee80a

你可能感兴趣的文章
记那次失败了的面试
查看>>
程序包+创建包规范+创建包体+删除程序包
查看>>
css写出三角形(兼容IE)
查看>>
Vue过渡效果之JS过渡
查看>>
前端工程师技能之photoshop巧用系列第二篇——测量篇
查看>>
3-继承
查看>>
java中如何实现类似goto的作法
查看>>
Switch入门第二讲
查看>>
iOS学习过程中遇到的一些有用的小功能(8/13更新)
查看>>
海归千千万 为何再无钱学森
查看>>
更新日志(建议升级到2017.1.18a) && 更新程序的方法
查看>>
taro 填坑之路(一)taro 项目回顾
查看>>
vue2.0 仿手机新闻站(六)详情页制作
查看>>
HTML超文本标记语言-基础标签整理
查看>>
20155222 c语言实现pwd命令
查看>>
FreeRTOS的内存管理
查看>>
TensorFlow 1.9官网树莓派安装教程
查看>>
Linux主机如何用ssh去登录docker容器的步骤
查看>>
android手势事件 快速移动 长按触摸屏 按下触摸屏,并拖动
查看>>
前端之js-本地存储-localStorage && IndexedDB
查看>>