簡體   English   中英

如何動態管理多個數據源

[英]How to dynamically manage multiple datasources

其他主題中已經涵蓋了類似的主題,但我找不到解決問題的明確方法。

我們想要實現的是設計一個 web 應用程序,它能夠:

  1. 在啟動時讀取數據源配置(包含多個數據源定義的 XML 文件,該文件位於 WAR 文件之外,它不是應用程序上下文或 hibernate 配置文件)
  2. 為它們中的每一個創建一個 session 工廠(考慮到每個數據源都是具有不同模式的數據庫)
  3. 在運行時根據用戶輸入切換到不同的數據源(用戶可以 select 他們想使用哪個數據源)
  4. 提供正確的 dao object 來管理用戶請求。

目前我們有一個 DAO 管理器 object,它能夠讀取數據源配置文件並實例化多個 session 工廠,將它們保存在 map 中。 每個 session 工廠都是使用包含正確 hibernate 映射類(每個數據庫模式不同)的配置創建的。 此外,我們有多個 DAO 接口及其實現,用於訪問“他們的數據庫”。

此時,我們需要一種方法從 DAO 管理器獲取特定的 DAO object,其中包含附加的正確 session 工廠,所有這些都基於用戶請求(基本上是來自上述服務的調用,包含數據源 ID 或自定義數據源對象) .

理想情況下,服務層應該使用 DAO 管理器來獲取基於數據源 ID(例如)的 DAO object,而不用擔心它的實際實現:DAO 管理器會通過創建正確的 DAO object 並注入它來處理它正確的 session 工廠,基於數據源 id。

我的問題是:

  • 這是一個很好的方法嗎?
  • 如何使用 Spring 在 DAO 管理器中為每個 DAO 接口動態注入多個 DAO 實現?
  • 一旦創建了 session 工廠,有沒有辦法讓 Spring 處理它們,就像我通常在 application-context.xml 中進行依賴注入一樣?
  • 二級緩存是否仍然適用於每個 Session 工廠?

這是一個很好的方法嗎?

這可能是唯一可能的方法。 所以,是的。

如何使用 Spring 在 DAO 管理器中為每個 DAO 接口動態注入多個 DAO 實現?

動態的? 我以為你想在啟動時這樣做。 如果是這樣,只需提供一個帶有列表或數組的訪問器:

public void setMyDaos(List<Mydao> daos){
     this.daos = daos;
}

一旦創建了 session 工廠,有沒有辦法讓 Spring 處理它們,就像我通常在 application-context.xml 中進行依賴注入一樣?

這個好難我會說你可能不得不將你的 sessionFactory bean 存儲在scope=session

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM