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

相關文章
相關標籤/搜索