2013-05-29 180 views
0

我想了解數據庫連接池中的特定場景。任何關於此的指針都會非常有幫助。Tomcat中的連接池Scanario

設置

  1. Tomcat的web服務器
  2. MySQL服務器(最大連接= 18)的web應用的

配置:
web應用程序的context.xml中具有這些數據庫連接池的參數:

<Context path=... 
    <Resource name=... maxActive="20" maxIdle="18" 
    removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" 
    validationQuery="select 1" testOnBorrow="true"... /> 
</Context> 

方案
webapp的打開和關閉了不少的連接。然而,當webapp不再以dB進行交易時,池會保留其中的18個(如maxIdle = 18)。
現在,在這個時間點,一個單獨的Pure Java獨立應用程序請求數據庫連接。 MySQL服務器如何響應?

  1. 它會通過關閉由池保持的空閒連接來提供連接嗎?
  2. 將它拒絕連接的數據庫連接的最大數目已經打開(被關押在泳池邊)

如果我沒有與該方案明確的,請讓我知道,我將進一步明確。

乾杯, Rohitesh

+0

你爲什麼不測試它? –

+0

@JBNizet:這正是我正在做的。但我對我的發現並不那麼自信。所以,也要問社區的人們。 – Rohitesh

回答

1

DB服務器不知道,如果一個打開的連接是從池與否。對於數據庫服務器來說,它只是一個開放的連接,它永遠不會主動關閉它。

+0

那麼,這意味着獨立的Java應用程序會收到拒絕連接消息? – Rohitesh

+0

默認情況下MySQL已打開連接限制= 100請參閱https://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html –

+0

是的。它的確如此。但爲了讓我的問題更簡單,也更容易解釋,我將條件放在最大打開連接限制= 18 – Rohitesh

1

池的連接限制與數據庫的總連接限制無關。這只是特定連接池的限制。只要尚未達到爲您的服務器配置的總限制,其他應用程序就可以分配連接。

當然,讓連接池保持大量(閒置)連接打開將意味着您可以更快地達到配置的服務器限制(MySQL的默認值爲100)。

+0

這意味着,在我的情況下,我會收到拒絕連接的消息? – Rohitesh

+0

當且僅當您達到服務器的總限制;此處不涉及連接池限制。 –