我繼續上的應用程序,其中,不斷創建和關閉的(SQL)連接了很多相同的(Oracle)的數據庫,使用運行非常基本相同的憑據工作選擇,更新和插入。
目前,singleton CustomConnectionManager
檢查其池中是否有任何CustomConnector
可供發佈。一旦被發現,他們可能會被客戶關閉。在close()
下面的SQLConnection
(由CustomConnector
創建和維護)也是封閉的。如果CustomConnector
不可用,則會創建新的CustomConnector
。
關於這個的好處是,最終SQLConnection
遺體每次使用後關閉,然而,很少再利用是怎麼回事的價值在於SQLConnection
不CustomConnector
。
由於系統的所有用戶都將連接到相同的數據庫,因此可以使用相同的單個連接來容納所有請求。根據每個請求創建新連接器的原始解決方案似乎非常浪費。
建議:
singleton CustomConnectionManager
將保持2個隊列:
- 可用
CustomConnector
的隊列,每個都將保持它自己的SQLConnection
和 - 的
inUse
CustomConnector
個隊列。根據要求,新的CustomConnector
將被創建並給出。
客戶端交互只發生在singleton CustomConnectionManager
。
當需要新的連接時,管理員創建它,將其發送給客戶端並將其放置在隊列中inUse
。當用戶正在使用的連接,而不是關閉它完成,客戶端將.markConnectorAvailable()
,它會把它放回availableConnectors
隊列(客戶端將不再能夠控制底層的SQLConnection)
問題1:你怎麼看?這會工作嗎?有沒有現有的解決方案已經做得很好?
問題2:如果建議的方法是不是一個完整的浪費,有什麼好點CustomConnector
的關閉它的SQLConnections?
afaik ojdbc包含連接池以重用連接 – JIV