2

我有一個部署在Tomcat服務器A和發送查詢到大量不同的SQL Server數據庫上的服務器B.如何限制從我的tomcat部署的java應用程序連接到SQL Server服務器的數量?

我擔心我的應用程序可以重載這個SQL Server數據庫服務器,並想申請有一些方法可以防止它連接到該服務器上的任何數據庫的請求,如果一些任意數量的連接已經存在並且未被關閉。

我正在研究使用連接池,但我的印象是,這隻會將連接池連接到SQL Server服務器上的特定數據庫,我想要控制將出現在許多不同數據庫中的這些組合連接的總數(順便說一句,我只能找出個人數據庫的動態名稱,因爲他們每天都在變化)。連接池是否會照顧到我,我是從錯誤的角度來看待這個問題嗎?

我無法訪問SQL Server服務器的配置。

歡迎您鏈接到您建議的解決方案的教程或工作示例!

回答

1

你有沒有考慮過使用DBCP?請參閱here瞭解更多信息

+0

謝謝,我已經配置好了,它似乎工作! – 2010-05-26 16:28:46

+0

太棒了,高興地幫助:) – soulBit 2010-05-26 16:48:55

1

你是對的。數據庫池將限制與數據庫或所有數據庫的連接,具體取決於池的配置方式。

以下是幾個實施database connection pools的開源軟件包。其中一個可能做你想做的。

+0

非常感謝,但我認爲這些都是我需要的矯枉過正。我正在使用似乎正在處理它的JNDI Datasource/DBCP - 如果這不是一個合適的解決方案,並且我誤解了,請添加註釋! – 2010-05-26 16:32:35

0
connection pooling ... this will only pool connections to a specific database on the mssql server 

AFAIK,這是正確的。您的連接池只會限制連接到爲其定義的數據庫特定的連接數。

want to control the total of these combined connections that will occur to many different databases 

我不認爲你可以控制池中所有數據庫的連接數。你寫過你沒有訪問權限來更改MSSQL服務器上的內容。所以在MSSQL上的各種數據庫上創建SYNONYM不是一種選擇。

你可以在應用程序中編寫自己的類,比如說一個ConnPoolManager,它有一個內部計數器,在從任何池獲取和釋放連接之前。 該類應將所有JNDI查找緩存到每個池。 對於應用程序來連接任何池,它通過ConnPoolManager,如果計數器顯示maxlimit尚未交叉,只有這樣它才能獲取連接。 否則它會引發一些例外情況,以供您稍後嘗試。

這可能是一個設計模式的業務代表的線。

說了這麼多,我想對你一個更大的問題將是

incidentally I can only find out the names of individual db's dynamically as they change day to day 

,因爲你將有望產生新的或在Tomcat中編輯連接池設置的每一天?這是未來的維護噩夢。

+0

感謝您的意見,但我認爲JNDI數據源/ DBCP似乎照顧我的需要:) 順便說一句,我只是使用此方法進行連接,並選擇使用簡單的連接後使用哪個數據庫執行(「USE mydatabase_name」) – 2010-05-26 16:31:14

+0

@CJ,所以我高估了你的問題。很高興你得到了正確的答案。 – JoseK 2010-05-27 05:02:17

相關問題