有時候需要在程式中動态切換資料源,那麼這個系列的之前的博文所闡述的方法就不再使用了,總不能通過程式更改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);可以轉換不同的資料源.