簡體   English   中英

用於動態數據庫連接的連接池

[英]Connection pool for dynamic database connections

問題設置基於Web服務(Spring / Java,Tomcat7和MySql),其中每個用戶都有自己的數據庫,因此每個請求都需要自己的連接。 由於所有數據庫都是在運行時動態創建的,因此在啟動之前靜態配置它們不是一種選擇。

為了優化數據庫連接使用,數據庫連接池的實現會很棒,對吧?

使用Java / Spring:如何為動態數據庫創建連接池? 我對這里缺乏干凈的選擇感到震驚!

問題Tomcat的連接池 (據我所知也理解為C3P0 )將每個新的DataSource實例視為一個完整的新連接池 - > stack-reference

  1. 創建具有通用MySql連接的靜態數據源(不指定連接時的數據庫)並使用帶有此數據源的連接池以及適配的SQL語句是一個好主意嗎?
    堆疊參考
  2. 如何開發基於自定義持久數據庫的數據源池? 有表演經驗嗎? 有什么建議? 任何圖書館都這樣做?
  3. 或者通過動態地從Java動態創建Tomcat JNDI數據源來解決Tomcat的DataSource問題是否可行?
  4. 我無法相信沒有更簡單/簡單的解決方案。 Grails / Hibernate正在努力解決這個問題,Java / JDBC正在努力解決這個問題......是否通過動態創建用戶特定數據庫來分離用戶數據這種罕見的用例? 如果是這樣,那么更好的設置是什么?

編輯

  1. 另一種選擇是來自@ M.Deinum的建議, 使用單個已配置的數據源並動態熱交換以獲得正確的連接 - > M.Deinum Blogstack-reference
    如何使用上面的連接池執行?

我相信HikariCP無需指定單個數據庫即可運行。

在運行時創建數據庫后,您還必須在運行時創建池。 我擔心彈簧基礎設施在這里沒有給你任何幫助,因為它是針對通常的靜態用例進行調整的。

我有一張泳池地圖:

  • 有一個
      映射<connectionUrlString,List <c3poPool >> map 
  • 請求連接時,從地圖中獲取相應的c3po池
  • 並且您可以充分利用這兩個世界,因為每個動態創建的數據庫的真實連接池都由c3po實例處理,但您可以在運行時創建新實例

這是一個低級解決方案。 如果您想更進一步,可以將此邏輯包裝到數據庫連接提供程序中,並將其注冊為“驅動程序”。 這樣,應用程序的任何部分都會請求新連接,您只需從現有池返回一個連接(如果請求了一個全新的連接,則為此創建一個新池)。

首先,對不起我的英語,我每天都在進步。

根據我的經驗,我有一個類似的情況,它是春天框架的決心。 讓我解釋一下你是如何解決這個問題的。

  1. 制作具有以下特征的spring配置文件:a)資源加載器:這一個負責從配置文件或數據庫加載屬性,這些屬性將適合建立數據庫連接。 b)使用您要加載的屬性參數化的池數據庫配置。

  2. 創建一個定位器類:在這個類中,你需要一個HashMap

  3. 使用spring的多上下文功能:想法是為您建立的每個連接分配一個代碼,然后像使用spring的應用程序上下文一樣加載該連接,然后在locator類中,將該上下文放入映射並將其作為頻繁使用如你所願。

我認為您按照這些步驟操作,可以根據需要創建動態池或數據庫連接。

暫無
暫無

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

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