簡體   English   中英

JDBC連接如何實現?

[英]How are JDBC connections implemented?

我有一個項目,在其中使用HikariCP進行JDBC連接池。 而且HikariCP可以很好地滿足我的需求。 它還如下記錄池的統計信息。

2014-12-03 10:16:08 DEBUG HikariPool:559 - Before cleanup pool stats loginPool (total=8, inUse=0, avail=8, waiting=0)
  2014-12-03 10:16:08 DEBUG HikariPool:559 - After cleanup pool stats loginPool (total=7, inUse=1, avail=7, waiting=0)

出於實驗目的,我使用MySQL Workbench關閉了已配置數據庫的所有MySQL連接。 但是,盡管沒有到數據庫的實際連接,我仍然看到HikariCP像以前一樣記錄了統計信息。 當有連接請求時,它立即建立了連接(初始8),因此一切正常。

因此,我的問題是如何管理或實現這些連接? 我認為HikariCP記錄統計數據(好像有連接)的原因是因為它在內存中具有對連接的有效引用,而這些連接實際上是不存在的(使用數據庫)。

我的理解正確嗎?

連接池在啟動時創建了8個連接。 您說您使用工作台斷開了它們的連接。 大多數連接池在使用之前都不知道連接已斷開。

您的假設是正確的。 您手動終止了連接,但是該池有一個假定已連接的8個套接字的句柄。 給定時間,您的連接池可能已經檢查了連接的有效性,並試圖重新連接它們。 我不能代表HikariCP,但這就是現代連接池的作用。

當使用MySQL Workbench關閉連接時,就是在服務器端關閉它們。 在JDBC(客戶端)端,以前建立的連接將一直存在,直到客戶端代碼嘗試使用它們為止。 到那時,它們會被發現“損壞”; 即客戶端嘗試使用它們時將獲得異常。

客戶端JDBC連接對象僅在Java應用程序代碼將它們返回到連接池時才關閉或回收。

暫無
暫無

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

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