緊接着上一章,由於如今作的項目仍是以spring爲主要的容器管理框架,因此寫如下spring如何整合多個數據源。mysql
咱們通常應用對數據庫而言都是「讀多寫少」,也就說對數據庫讀取數據的壓力比較大,有一個思路就是說採用數據庫集羣的方案,程序員
其中一個是主庫,負責寫入數據,咱們稱之爲:寫庫;spring
其它都是從庫,負責讀取數據,咱們稱之爲:讀庫;sql
那麼,對咱們的要求是:數據庫
一、 讀庫和寫庫的數據一致;mvc
二、 寫數據必須寫到寫庫;app
三、 讀數據必須到讀庫;框架
解決讀寫分離的方案有兩種:應用層解決和中間件解決。運維
優勢:性能
一、 多數據源切換方便,由程序自動完成;
二、 不須要引入中間件;
三、 理論上支持任何數據庫;
缺點:
一、 由程序員完成,運維參與不到;
二、 不能作到動態增長數據源;
優勢:
一、 源程序不須要作任何改動就能夠實現讀寫分離;
二、 動態添加數據源不須要重啓程序;
缺點:
一、 程序依賴於中間件,會致使切換數據庫變得困難;
二、 由中間件作了中轉代理,性能有所降低;
相關中間件產品使用:
mysql-proxy:http://hi.baidu.com/geshuai2008/item/0ded5389c685645f850fab07
Amoeba for MySQL:http://www.iteye.com/topic/188598和http://www.iteye.com/topic/1113437
在進入Service以前,使用AOP來作出判斷,是使用寫庫仍是讀庫,判斷依據能夠根據方法名判斷,好比說以query、find、get等開頭的就走讀庫,其餘的走寫庫。
springmvc是子容器,spring是父容器,在父容器的applicationContext.xml配置文件中再添加新配置的數據源
xml中:
好啦,就是這樣,算是簡單的實現,若是想優化,改進切面實現,使用事務策略規則匹配