java – connection pool 的流程與使用!

現在跟資料庫的連線100%都會使用 connection pool 來處理, 雖然這已經是一種很普遍的作法,但從學習的角度來看,我們必須知其然,也知其所以然!

JDBC中取得 connection使用後並關閉的流程

  • 取得 java.sql.DataSource 要取得連線資源
  • 呼叫 getConnection() 來連立資料庫連線
  • 資料庫驗證使用者帳號、密碼,依照連線參數進行對應的處理
  • 建立資料庫連線,開啟一個 TCP socket
  • 程式進行資料讀取或是寫入
  • 程式關閉 connection 用 close()
  • 關閉TCP socket

從流程可以看出,connection 的建立與關閉對於資料庫來說,很耗費系統資源的工作,

而我們的應用程式又必須等待取得 connection 之後才有辦法與資料庫互動,

如果在程式裡面有大量的 connection 建立與關閉,可以預期這樣對於程式的執行效能會有不小的衝擊

connection pool 的功能是作為 connection 的「快取區」,基本的使用流程是在程式一啟動就向資料庫建立一定數量的連線,

並存放於 connection pool 裡,後續程式 getConnection() 時是直接向 connection pool  取用,用完後呼叫 connection.close() 就會放回 connection pool

那麼使用 connection pool 的好處

  • 降低向資料庫建立 connection  的頻率
  • connection pool 中的 connection 可重複使用
  • 程式呼叫 getConnection() 是直接向 connection pool 取得 connection,速度上比建立新的 connection 還快的多
  • connection pool 有許多設定可以幫助我們管理 connection pool 裡面的connection ,比如設置初始的連線數、最大連線數、connection 閒置處理…等等,適當的設定這些參數可以提升建立/取用 connection 的效率,也能減輕資料庫建立連線的負擔
  • connection pool 可作為資料庫前方的「緩衝區」:當程式需要取用大量連線時,這些請求都會由 connection pool 依設定好的策略來處理,不會一下子拖垮資料庫運行效能

Leave a Comment

發佈留言必須填寫的電子郵件地址不會公開。