人人都是程式設計師,希望在零碎的閱讀時間裡,給您一些技術提升。
1 讀寫分離及多數據源
在我們開發的大多數業務中,往往讀多寫少,資料庫的讀會首先變成資料庫使用的瓶頸。此時,我們必須能夠提升資料庫的讀性能。
一般寫1萬條數據的時間比讀1萬條的數據時間大很多。讀寫鎖衝突從會限制資料庫讀的性能,讀寫分離來保證數據使用性能。用一句話概括,讀寫分離可以很好地解決資料庫的讀性能瓶頸的。一般都是一個主伺服器負責寫入,多個從伺服器負責查詢。
讀寫分離的關鍵是一個項目同時訪問多個數據源,也就是可以將數據存儲的不同伺服器的不同資料庫上。下面介紹spring boot+mybat-plus如何配置多個數據源,並實現數據操作測試。
2 項目配置
不多說,項目代碼直接搞起來。先創建一個集成了mybatis-plus的spring boot的項目,關於如何創建,及mybatis-plus的更多使用,請關注小編其他的文章。
先在pom.xml導入項目依賴,如下圖。
需要注意的是,這裡用了druid和aop兩個依賴。
然後在配置文件配置主從數據源,實際項目可以讓master用來寫,slave用來讀。
3 數據源配置
創建一個multiple包,新建DataSourceContextHolder類,配置數據源的上下文,如下圖。
在同包下創建MultipleDataSource類,繼承AbstractRoutingDataSource,如下圖。
再創建一個config包,添加druid配置文件類,如下圖。這裡請注意,在pom.xml引入druid的版本必須是1.1.9,否則會出錯。
創建數據源枚舉,如下圖。
創建數據源註解,用於設置接口所用哪個數據源。創建一個annotation包,包下創建註解接口,如下圖。
對數據源選擇進行切面處理,創建AOP,在數據源切換時進行日誌輸出。
最後的配置,在config包下,創建MyBatiesPlusConfiguration,進行如下配置。
4 創建實體類,dao層,service層
在entity包下創建一個Goods實體類,添加@Data註解;在mapper包下創建GoodsMapper接口,添加@Mapper註解;在service包下創建GoodServcie註解,添加@Service註解,在service裡面分別創建兩對添加商品和查詢商品的接口,分別加上@DataSource註解,分別對應DataSourceEnum.db1和DataSourceEnum.db2的數據源註解,分別對兩個不同的數據源進行操作。
5 測試效果
在測試用例添加一個測試方法,分別給db1,db2插入一條商品數據,然後在分別將兩個不同的資料庫數據查詢出來。測試項目是否正常切換表操作兩個資料庫的數據。
通過測試。
6 結束語
人人都是程式設計師,感謝您的閱讀,歡迎關注。