本文仍是基於噹噹網Sharding-Jdbc的依賴git
這裏須要特殊介紹的是,使用Sharding-JDBC進行讀寫分離的時候,只容許設置一個主庫,從庫的話能夠設置多個,訪問策略的話從源碼上看只有兩種輪詢(ROUND_ROBIN)和隨機(RANDOM)。spring
源碼代碼以下:sql
因爲本地環境並無使用Mysql主從複製,只是建立了三個庫,其中database0做爲主庫,database1和database2做爲從庫。主庫進行增刪改操做,從庫進行查詢操做,以下圖爲本文數據庫的三個表。數據庫
如上圖分別是三個數據庫中的user表,其中master-user爲database0數據庫中的user表,salve-user1爲database1中的user表,salve-user2爲database2中的user表。springboot
本文使用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.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爲修改語句。
源碼地址:https://gitee.com/dalaoyang/springboot_learn/tree/master/springboot2_shardingjdbc_dxfl