基於spring和ibatis的多數據源切換方案

基本介紹

在僅使用ibatis時,多數據源簡直就是夢魘,每多一個數據源就須要多一份sql-map-config配置文件。
採用spring的AbstractRoutingDataSource就能夠簡單的解決這個問題。
AbstractRoutingDataSource實現了javax.sql.DataSource接口,所以能夠理解爲一個虛擬的動態DataSource,在須要的時候根據上下文Context動態決定使用哪一個數據源。

該方案的優點

首先,這個方案徹底是在spring的框架下解決的,數據源依然配置在spring的配置文件中,sessionFactory依然去配置它的dataSource屬性,它甚至都不知道dataSource的改變。惟一不一樣的是在真正的dataSource與sessionFactory之間增長了一個MultiDataSource。
其次,實現簡單,易於維護。這個方案雖然我說了這麼多東西,其實都是分析,真正須要咱們寫的代碼就只有MultiDataSource、SpObserver兩個類。MultiDataSource類真正要寫的只有getDataSource()和getDataSource(sp)兩個方法,而SpObserver類更簡單了。實現越簡單,出錯的可能就越小,維護性就越高。
最後,這個方案可使單數據源與多數據源兼容。這個方案徹底不影響BUS和DAO的編寫。若是咱們的項目在開始之初是單數據源的狀況下開發,隨着項目的進行,須要變動爲多數據源,則只須要修改spring配置,並少許修改MVC層以便在請求中寫入須要的數據源名,變動就完成了。若是咱們的項目但願改回單數據源,則只須要簡單修改配置文件。這樣,爲咱們的項目將增長更多的彈性。

該方案的缺點

沒有可以解決多用戶訪問單例「sessionFactory」時共享「dataSource」變量,致使產生爭搶「dataSource」的結果,本質相似於操做系統中的「生產者消費者」問題。所以當多用戶訪問時,多數據源可能會致使系統性能降低的後果。
相關文章
相關標籤/搜索