spring 可以設定動態資料來源,這樣可以對程式來透明的支援切換操作不同的資料庫。
這篇文章寫得非常不錯。測試通過,並準備在專案中使用這個方法。還有幾個問題希望大家給點意見:
首先說一下我的需求:資料庫結構都是一樣,但具體有多少個資料庫不確定(視具體使用者而定),使用者操作那個資料庫要根據登入的時候進行選擇,或根據使用者的許可權而定。這個資訊肯定是儲存在使用者的登入資訊中(例如:session)
問題1、當有不同的使用者需要操作不同的資料庫時(根據登入時的選擇或指定),什麼時候切換資料庫?是在service層還是dao層?這個資訊怎麼傳給層中的方法?如果每個方法都加乙個引數這樣不太好吧?
問題2、這個頻繁的更換資料庫,會不會有效能影響?因為sessionfactory是乙個切換資料庫是不是就是重新初始一次sessionfactory?
附原文如下:
spring2.0.1以後的版本已經支援配置多資料來源,並且可以在執行的時候動態載入不同的資料來源。通過繼承 abstractroutingdatasource就可以實現多資料來源的動態轉換。目前做的專案就是需要訪問12個資料來源,每個資料來源的表結構都是相同的,所以要求資料來源的變動對於編碼人員來說是透明,也就是說同樣sql語句在不同的環境下操作的資料庫是不一樣的。具體的配置如下:
一、首先需要寫乙個靜態的鍵值對照類:
**package cn.com.xinli.ccp.dynamicds;
public class datasourcemap
這個類主要在使用的時候當作獲得資料來源的標誌使用。
二、建立乙個獲得和設定上下文的類:
**package cn.com.xinli.ccp.dynamicds;
public class customercontextholder
public static string getcustomertype()
public static void clearcustomertype()
}這個主要負責設定上下文環境和獲得上下文環境。
三、建立動態資料來源類,這個類必須繼承abstractroutingdatasource:
**package cn.com.xinli.ccp.dynamicds;
import org.springframework.jdbc.datasource.lookup.abstractroutingdatasource;
public class dynamicdatasource extends abstractroutingdatasource
}這個類實現了 determinecurrentlookupkey方法,該方法返回乙個object,一般是返回字串,也可以是列舉型別。該方法中直接使用了 customercontextholder.getcustomertype()方法獲得上下文環境並直接返回。
四、編寫spring的配置檔案配置資料來源
**class="org.springframework.jdbc.datasource.drivermanagerdatasource">
com.ibm.db2.jdbc.net.db2driver
jdbc:db2:127.0.0.1:test
在這個配置中可以看到首先有個parentdatasource,這個主要配置一些資料來源的公用資訊,專案中都是鏈結db2資料庫;admindatasource和yxhdatasource是根據不同需要配置的個性化資訊,但都必須加parent屬性,值為 parentdatasource。這樣就配置好了2個資料來源資訊。當然如果鏈結的多資料來源是不同型別的兩個資料庫,那麼 parentdatasource就可以不要了,直接配置兩個不同的資料來源鏈結就可以了。
五、編寫spring配置檔案配置多資料來源對映關係
**在這個配置中第乙個property屬性配置目標資料來源,中的key-type必須要和靜態鍵值對照類datasourcemap中的值的型別相同;中key的值必須要和靜態鍵值對照類中的值相同,如果有多個值,可以配置多個< entry>標籤。第二個property屬性配置預設的資料來源。
六、配置hibernate。
hibernate的配置和普通的hibernate、spring結合的配置一樣
關於dao的**這裡就省略了。
七、配置結束,可以使用了。
**public class daotest extends testcase
}在專案中對於編碼人員對多資料來源的切換可以做成透明的,操作同樣的dao,就可以訪問不同的資料庫了。
technorati : spring
spring動態資料來源
在實際的業務場景中,我們經常會遇到需要動態配置資料來源的情況,只需要修改配置,就能增加新的資料來源的接入,而不需要修改程式 通過動態資料來源技術可以實現這個目標。具體的 參照 示例專案 通常在用springboot開發資料庫應用時,我們會在配置檔案中配置好資料來源,程式中指定資料來源進行資料庫操作。...
spring 配置資料來源
spring配置資料來源包括 1.由jdbc驅動程式定義的資料來源 2.由jndi查詢的資料來源 3.連線池的資料來源 我們這裡介紹資料來源連線池的配置 xmlns xsi xsi schemalocation spring beans 2.5.xsd 這四個屬性是必須配置的。同時還有另外的一些配置...
Spring配置資料來源
spring 在第三方依賴包中包含了兩個資料來源的實現類包,其一是apache 的dbcp 其二是c3p0 可以在spring 配置檔案中利用這兩者中任何乙個配置資料來源。第一種配置 apache 的dbcp 需要匯入兩個包 commons pool.jar 和commons dbcp.jar 配置...