在之前的 MVC 用戶認證示例中,我們採用傳統 JDBC 直接獲取連接。隨著訪問量增長,這種「請求到來 → 建立連接 → 操作數據庫 → 關閉連接」的模式暴露出嚴重性能瓶頸:頻繁創建銷毀 Connection 對象消耗大量服務器時間與內存,且每次都需驗證用戶名密碼。
核心思想是預先創建並緩存一組數據庫連接。應用程序需要時從池中「借用」空閒連接,用完「歸還」而非關閉。這極大降低了連接建立的開銷,顯著提升吞吐量。
BookDB 及表 books,插入測試數據<Resource name="jdbc/BookDB" auth="Container" type="javax.sql.DataSource"
maxActive="20" maxIdle="10" maxWait="-1"
username="root" password="1234"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/BookDB"/>
<%@ page import="javax.sql.*, javax.naming.*, java.sql.*" %>
<%
Context initCtx = new InitialContext();
DataSource ds = (DataSource) initCtx.lookup("java:comp/env/jdbc/BookDB");
Connection conn = ds.getConnection();
// ... 正常使用 conn ...
conn.close(); // 實際歸還連接池
%>
引入 DataSource 連接池是 Java Web 應用從「能跑」走向「耐用」的關鍵一步。生產環境中請根據業務並發調整 maxActive、maxIdle 等參數,並監控連接泄漏。