日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

spring mysql 读写分离_如何利用Spring实现数据库读写分离?

發布時間:2024/1/23 数据库 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring mysql 读写分离_如何利用Spring实现数据库读写分离? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現在大型的電子商務系統,在數據庫層面大都采用讀寫分離技術,就是一個Master數據庫,多個Slave數據庫。Master庫負責數據更新和實時數據查詢,Slave庫當然負責非實時數據查詢。因為在實際的應用中,數據庫都是讀多寫少(讀取數據的頻率高,更新數據的頻率相對較少),而讀取數據通常耗時比較長,占用數據庫服務器的CPU較多,從而影響用戶體驗。我們通常的做法就是把查詢從主庫中抽取出來,采用多個從庫,使用負載均衡,減輕每個從庫的查詢壓力。

采用讀寫分離技術的目標:有效減輕Master庫的壓力,又可以把用戶查詢數據的請求分發到不同的Slave庫,從而保證系統的健壯性。我們看下采用讀寫分離的背景。

隨著網站的業務不斷擴展,數據不斷增加,用戶越來越多,數據庫的壓力也就越來越大,采用傳統的方式,比如:數據庫或者SQL的優化基本已達不到要求,這個時候可以采用讀寫分離的策略來改變現狀。

具體到開發中,如何方便的實現讀寫分離呢?目前常用的有兩種方式:

1.第一種方式是我們最常用的方式,就是定義2個數據庫連接,一個是MasterDataSource,另一個是SlaveDataSource。更新數據時我們讀取MasterDataSource,查詢數據時我們讀取SlaveDataSource。這種方式很簡單,我就不贅述了。

2.第二種方式動態數據源切換,就是在程序運行時,把數據源動態織入到程序中,從而選擇讀取主庫還是從庫。主要使用的技術是:annotation,SpringAOP,反射。

借助于spring框架在2.0.1之后提供的AbstractRoutingDataSource可以實現動態的選擇數據源datasource,下面先舉一個最簡單的例子:

一、首先新建一個CatalogVO對象的DAO(見代碼1),它繼承了SimpleJdbcDaoSupport,JdbcDaoSupport需要注入一個DataSource,同時也提供了操作模板JdbcTemplate。添加一個方法用于獲取所有的“貨物Item”。貨物Iteam是一個POJO類(見代碼2)

代碼1:

代碼2:

二、配置Spring多數據源,這里配置了一個主庫和一個從庫,他們可以共同繼承一個父的數據源。

代碼3:

三、新建一個datasource繼承自AbstractRoutingDataSource,并且覆蓋determineCurrentLookupKey()方法,每次用這個datasource獲取數據庫連接的時候都會回調這個方法獲得key,根據返回的字符串key(也可以是枚舉值,數字類型),動態地通過datasource配置的id來在Spring的配置文件中找到相應的datasource來獲取connection(見代碼4)。那么如果每次訪問都需要根據key來決定如何選擇數據源,那么這個key必須要保證線程安全,并發情況下每個線程都會去尋找本應該屬于自己的key獲取數據源,所以CustomerContextHolder類中就用到了ThreadLocal來保證(見代碼5)。

代碼4:

代碼5:

在Spring中的配置如下:

代碼6:

四、測試用例

代碼7:

為了方便測試,另外定義了2個數據庫,shop模擬Master庫,test模擬Slave庫,shop和test的表結構一致,但數據不同,數據庫配置如下:

在spring的配置中增加aop配置

下面是MyBatis的UserMapper的定義,為了方便測試,登錄讀取的是Master庫,用戶列表讀取Slave庫:

好了,運行我們的Eclipse看看效果,輸入用戶名admin登錄看看效果

從圖中可以看出,登錄的用戶和用戶列表的數據是不同的,也驗證了我們的實現,登錄讀取Master庫,用戶列表讀取Slave庫。

小編結語:

更多內容盡在課課家教育~~

總結

以上是生活随笔為你收集整理的spring mysql 读写分离_如何利用Spring实现数据库读写分离?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。