淺談幾種如何減少JDBC連接池開銷的方法
在一個服務器的應用中,會處理來自多個不同用戶的請求,并且必須為每一個用戶保持并打開一個鏈接(防止事務的崩潰),由于創建一個Connection的盡管實現起來簡單,但對于大流量的服務器應用來說卻要花費大量的時間。
為了使JDBC連接池連接的時間盡可能的少
解決方法有以下幾種:
一:為每個訪問數據的servlet和jsp頁面維護一個Connection,并保持在一個實例變量中,直到應用關閉,但這樣會導致大量的多線程問題。另外對于數據庫能保持的連接數代價時昂貴的,商業數據指定價格一部分時基于同時打開的連接數的。
二:***的做法就是使用一個JDBC連接池。其優點有以下幾點:
1:創建連接的時間縮短,因為在池中鏈接時可以重用的。
2:解決了多線程的問題。
3:連接池可以指定Connection的***連接數,使得每一個鏈接得到***效的利用。
另外:由于所有的用戶使用的時同樣的Connection對象,因此不能依賴數據庫引擎著個的限制用戶對保護資源的訪問,因此要為不同的用戶角色組使用不同的連接池,為不同的數據帳戶來創建不同的Connection對象。
在jdk文檔中明確說明了:DataSource是一個接口,作為DriverManager工具的替代項,DataSource對象是獲取連接的***方法。
實現此接口的類可以提供JDBC連接池功能。
PooledConnection類,該類為連接池管理提供鉤子(hook)的對象。PooledConnection對象表示到數據源的物理連接,當應用程序調用DataSource.getConnection方法時,它取回Connection對象。如果連接池已完成,則該Connection對象實際上是到PooledConnection對象的句柄,這是一個物理連接。
需要注意的是當應用調用close()方法時,并不是關閉數據庫鏈接,而是通知其鏈接在池中已不再使用,然后DataSource會將該PooledConnection返回至JDBC連接池。
基于JDBC的應用中幾乎全是圍繞Connection接口展開的,必須創建一個連接Connection,此連接相當于應用和數據庫之間的一個通道,并且它還是事務的邊界,只有通過同一個Connection執行的SQL語句才能組成一個事務。
在一個服務器的應用中,會處理來自多個不同用戶的請求,并且必須為每一個用戶保持并打開一個鏈接(防止事務的崩潰),由于創建一個Connection的盡管實現起來簡單,但對于大流量的服務器應用來說卻要花費大量的時間。
【編輯推薦】