spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

背景

最近在学习golang的sql和sqlx等一些和数据库相关的东西,发现golang目前没有像sharding-jdbc一样的分表分库的中间件,我在github上搜寻了很久,也问了一些同学,他们公司使用golang开发的,数据库分表分库的解决方案目前基本上有三种,第一种是目前数据量比较少,基本上用不到分表分库,第二种是使用原生的sql或者sqlx,然后在业务逻辑层写一层比较简单的类似中间件的小组件判断库名和表名来做,这样也是可以的,第三种就是使用tidb,这个听说很香,目前也很火,是国内pingcap公司开发的,也是使用golang和rust语言开发的,这个以后我们应该也会去学,言归正传,java分表分库这块目前感觉是百花齐放,百家争鸣,现在还是学习一下sharding-jdbc的原理,如果想了解原理,还是先学会如何使用,本小节就开始简单地整合一下spring boot2.x和sharding-jdbc的最新版本

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)


本小节主要内容是整合spring boot 2.1.8 + mybatis 3.4.2 + sharding-jdbc4.0.0-RC3 +druid 1.1.20 版本,为了方便大家了解基本的原理,这个小节使用手动配置bean的方式来做,一步步的通过手动配置的方式,了解其基本的配置原理(源码提交到github上了,如果有需要,地址可以私聊我,或者评论区给出)

如果大家觉得写的还算不错,希望大家点赞或者关注收藏,素质3连一下,感谢~

先说一下,我们这个示例的逻辑,我们有一个订单表t_order,目前只按照用户id(user_id)进行分表分库,一共分2个库,每个库3张表,总计6张表

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

表结构也比较简单,建表语句如下

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

分库逻辑也是比较简单,我们按照user_id取余的方式来分库分表,具体的配置在下面介绍

IDEA 搭建spring boot2.x基本项目

这个之前整合dubbo的文章介绍过,这边就不赘述了,最后搭建完整体的项目结构如下

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)


我们先简单地说明一下maven依赖,依赖主要分为2个部分,第一个部分是spring boot的依赖,还有一个是sharding-jdbc,mybatis,mysql,还有druid数据源的maven依赖

spring boot的依赖如下

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

spring boot相关的依赖

sharding-jdbc,mybatis,mysql,druid的依赖如下

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

有了这些maven依赖之后,我们需要手动的通过springboot的Bean注解来做相关的配置,废话不多说,开始一步步的配置,我们所有的配置在ShardingDataSourceMybatisConfiguration.java类中

1.原始数据源的配置

因为我们是2个库,所以我们需要配置2个druid数据源,为了方便大家集中看代码,我不把配置文件放在application.properties中了,直接写死数据库地址的配置

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

2.配置sharding-jdbc的代理数据源

2.1 sharding-jdbc是从datasource做路由的,所以我们需要把上面配置的2个数据源扔给sharding-jdbc,让sharding-jdbc做一层代理

2.2 我们再通过TableRuleConfiguration类告诉sharding-jdbc,我们需要对哪些表做分表分库的配置,我们"ds${0..1}.t_order_${0..2}" 来告诉sharding-jdbc,我们在数据库分了ds0,ds1库,每个库中有t_order_0,t_order_1,t_order_2三张表

2.3 最后我们配置分库的策略和分表的策略,分别通过DatabaseShardingStrategyConfig和TableShardingStrategyConfig传入

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

到此为止,sharding-jdbc的配置就全部结束了,也就是说sharding-jdbc只对datasource进行封装,对于你上层如何使用该datasource,sharding-jdbc是不care的,你是用mybatis,hibernate还是其他的orm框架都没有关系

3.mybatis的配置

3.1 mybatis的SqlSessionFactoryBean的配置,这边最主要的是2个配置,一个就是我们需要指定mapper.xml文件路径,我们放在resources/mappers文件夹下,然后最重要的就是要指定datasource数据源,是我们刚才的sharding-jdbc数据源

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

3.2 最后一步就是让spring来管理mybatis,并制定mapper层的路径

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)


4 其他模块的简单实现

我们主要sharding-jdbc的插入,批量插入,单个插入,和批量查询我们日常最常用的几个功能,所以我们的OrderDao定义如下

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

对应的OrderMapper.xml的sql如下

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

因为是示例demo,我们service层就全部透传不做任何逻辑处理

OrderService接口定义基本上OrderDao一样,如下

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

实现逻辑也基本上算是透传OrderServiceImpl

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

最后就是OrderController代码也是四个测试方法入口

保存和批量保存的2个方法

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

查询和批量查询的个方法

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)


5.测试

启动环境

运行SpringBootMybatisShardingJdbcConfigurationApplication的main函数

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

1.插入测试,postman请求如下

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

插入效果

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

2.批量插入测试

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

批量插入效果,因为controller中user_id是从1000开始的,所以也没有问题

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)


3.查询测试

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

4.批量查询测试

spring boot2.x整合系列——整合Sharding-jbdc(手动配置版)

小结

本小节还是比较简单易懂的,从头到尾手动配置了sharding-jdbc和spring boot整个的全部过程,主要帮助大家对sharding-jdbc有个初步的了解,下一个小节,将使用spring-boot的autoconfiguration的方式,基于零配置的方式再来整合一遍sharding-jdbc


分享到:


相關文章: