天天看點

servlet連接配接mysql資料庫連接配接池_用連接配接池提高Servlet通路資料庫的效率

Java Servlet作為首選的伺服器端資料處理技術,正在迅速取代CGI腳本。Servlet超越CGI的優勢之一在于,不僅多個請求可以共享公用資源,而且還可以在不同使用者請求之間保留持續資料。本文介紹一種充分發揮該特色的實用技術,即資料庫連接配接池。

一、實作連接配接池的意義

動态Web站點往往用資料庫存儲的資訊生成Web頁面,每一個頁面請求導緻一次資料庫通路。連接配接資料庫不僅要開銷一定的通訊和記憶體資源,還必須完成使用者驗證、安全上下文配置這類任務,因而往往成為最為耗時的操作。當然,實際的連接配接時間開銷千變萬化,但1到2秒延遲并非不常見。如果某個基于資料庫的Web應用隻需建立一次初始連接配接,不同頁面請求能夠共享同一連接配接,就能獲得顯著的性能改善。

Servlet是一個Java類。Servlet引擎(它可能是Web服務軟體的一部分,也可能是一個獨立的附加子產品)在系統啟動或Servlet第一次被請求時将該類裝入Java虛拟機并建立它的一個執行個體。不同使用者請求由同一Servlet執行個體的多個獨立線程處理。那些要求在不同請求之間持續有效的資料既可以用Servlet的執行個體變量來儲存,也可以儲存在獨立的輔助對象中。

用JDBC通路資料庫首先要建立與資料庫之間的連接配接,獲得一個連接配接對象(Connection),由連接配接對象提供執行SQL語句的方法。本文介紹的資料庫連接配接池包括一個管理類DBConnectionManager,負責提供與多個連接配接池對象(DBConnectionPool類)之間的接口。每一個連接配接池對象管理一組JDBC連接配接對象,每一個連接配接對象可以被任意數量的Servlet共享。

類DBConnectionPool提供以下功能:

1) 從連接配接池擷取(或建立)可用連接配接。

2) 把連接配接傳回給連接配接池。

3) 在系統關閉時釋放所有資源,關閉所有連接配接。

此外, DBConnectionPool 類還能夠處理無效連接配接(原來登記為可用的連接配接,由于某種原因不再可用,如逾時,通訊問題),并能夠限制連接配接池中的連接配接總數不超過某個預定值。

管理類DBConnectionManager用于管理多個連接配接池對象,它提供以下功能:

1) 裝載和注冊JDBC驅動程式。

2) 根據在屬性檔案中定義的屬性建立連接配接池對象。

3) 實作連接配接池名字與其執行個體之間的映射。

4) 跟蹤客戶程式對連接配接池的引用,保證在最後一個客戶程式結束時安全地關閉所有連接配接池。