SpringBoot使用Sharding-JDBC读写分离

1.有关Sharding-JDBC

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

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

源码代码以下:sql

2.本文场景

因为本地环境并无使用Mysql主从复制,只是建立了三个库,其中database0做为主库,database1和database2做为从库。主库进行增删改操做,从库进行查询操做,以下图为本文数据库的三个表。数据库

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

3.代码实现

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

3.1 建表SQL 测试

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

3.2 依赖文件 3d

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


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访问http://localhost:8080/save,控制台如图所示。

再次访问,如图。

主键冲突了,其实这是因为插入的时候使用的database0,可是查询使用的是database1和database2,可是我在从库内并无ID是100的数据,因此JPA断定我为插入,可是数据库内缺有这样的数据。 咱们接下来测试一下查询。访问http://localhost:8080/getAll

再次访问,如图。

证实从库的读取是正常的,接下来修改从库的ID为100。而后访问http://localhost:8080/save,查看控制台如图。

由于存在了ID为100的数据,因此SQL为修改语句。

5.源码

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

相关文章
相关标签/搜索