天天看點

Spring+Mybatis多資料源配置(四)——AbstractRoutingDataSource實作資料源動态切換

有時候需要在程式中動态切換資料源,那麼這個系列的之前的博文所闡述的方法就不再使用了,總不能通過程式更改config.properties檔案的dataSource的值,然後再重新開機web伺服器以便加載applicationContext.xml檔案。這裡講訴的是如何利用AbstractRoutingDataSource進行資料源動态切換。

首先上applicationContext.xml檔案:

我們可以觀察到檔案中多了一段:

而且sqlSessionFactory的dataSource是關聯到上面這段内容的,而不是通過${dataSource}讀取config.properties檔案的内容擷取的。

這個com.shr.dao.datasource.DataSources是自定義的類,繼承自AbstractRoutingDataSource類,實作其determineCurrentLookupKey()方法。

代碼如下:

同樣,我們通過一個junit測試用例進行驗證:

通過改變DataSourceSwitch.setDataSourceType(DataSourceInstances.ORACLE);可以轉換不同的資料源.