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


分享到:


相關文章: