使用Spring+MySql實現讀寫分離(二)spring整合多數據庫

緊接着上一章,由於如今作的項目仍是以spring爲主要的容器管理框架,因此寫如下spring如何整合多個數據源。mysql

 

1. 背景

咱們通常應用對數據庫而言都是「讀多寫少」,也就說對數據庫讀取數據的壓力比較大,有一個思路就是說採用數據庫集羣的方案,程序員

其中一個是主庫,負責寫入數據,咱們稱之爲:庫;spring

其它都是從庫,負責讀取數據,咱們稱之爲:庫;sql

 

那麼,對咱們的要求是:數據庫

一、 讀庫和寫庫的數據一致;mvc

二、 寫數據必須寫到寫庫;app

三、 讀數據必須到讀庫;框架

 

2. 方案

解決讀寫分離的方案有兩種:應用層解決和中間件解決。運維

2.1. 應用層解決:

 

優勢:性能

一、 多數據源切換方便,程序自動完成;

二、 不須要引入中間件;

三、 理論上支持任何數據庫;

缺點:

一、 程序員完成,運維參與不到;

二、 不能作到動態增長數據源;

 

 

2.2.  中間件解決

 

優勢:

一、 源程序不須要作任何改動就能夠實現讀寫分離;

二、 動態添加數據源不須要重啓程序;

缺點:

一、 程序依賴於中間件,會致使切換數據庫變得困難;

二、 由中間件作了中轉代理,性能有所降低;

相關中間件產品使用:

mysql-proxyhttp://hi.baidu.com/geshuai2008/item/0ded5389c685645f850fab07

Amoeba for MySQLhttp://www.iteye.com/topic/188598http://www.iteye.com/topic/1113437

 

 

3.  使用Spring基於應用層實現(重要

3.1.  原理

 

在進入Service以前,使用AOP來作出判斷,是使用寫庫仍是讀庫,判斷依據能夠根據方法名判斷,好比說以queryfind、get等開頭的就走讀庫,其餘的走寫庫。

 

 

3.2.  DynamicDataSource

 

 

 

3.3.  DynamicDataSourceHolder

 

 

 

3.4.  DataSourceAspect

 

 

 

3.5.  配置2個數據源

 

 

 

3.5.2.  定義鏈接池

 springmvc是子容器,spring是父容器,在父容器的applicationContext.xml配置文件中再添加新配置的數據源

 

 

3.5.3.  定義DataSource

 

 

xml中:

 

 

 

3.6.  配置事務管理以及動態切換數據源切面

 

 

 好啦,就是這樣,算是簡單的實現,若是想優化,改進切面實現,使用事務策略規則匹配

相關文章
相關標籤/搜索