在 Java Web 開發中,資料庫連線池是提升效能、管理資源的關鍵。Tomcat 6 內建 DBCP 連線池支援,透過 context.xml 即可完成設定,無需修改 server.xml,大幅簡化部署流程。本文記錄完整設定步驟與測試程式碼。
MySQL-5.0.27-win32.zip)mysql-connector-java-5.0.4-bin.jar)apache-tomcat-6.0.10.exe)將 mysql-connector-java-5.0.4-bin.jar 複製至 $CATALINA_HOME/lib 目錄(Tomcat 6 以前放在 common/lib)。這步驟最容易被忽略,缺少驅動會拋出 ClassNotFoundException。
編輯 $CATALINA_HOME/conf/context.xml,在 <Context> 標籤內加入:
<Resource name="jdbc/MySQL"
auth="Container"
type="javax.sql.DataSource"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8"
username="root"
password="root"
maxActive="100"
maxIdle="30"
maxWait="10000"
removeAbandoned="true"
removeAbandonedTimeout="60"
logAbandoned="true" />
參數說明:
maxActive:最大活躍連線數maxIdle:最大閒置連線數maxWait:取得連線最長等待毫秒數removeAbandoned:自動回收被遺棄的連線,防洩漏在應用程式的 WEB-INF/web.xml 中加入:
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/MySQL</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
注意:res-ref-name 必須與 context.xml 的 name 屬性一致(去掉 jdbc/ 前綴或完整保留,視 JNDI 查找方式而定)。
<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>
<%@ page contentType="text/html;charset=UTF-8" %>
<html><body>
<%
out.print("測試開始
");
try {
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/MySQL");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM users");
while (rs.next()) {
out.print(rs.getString(1) + "
");
}
out.print("測試結束");
rs.close(); stmt.close(); conn.close();
} catch (Exception ex) {
out.print("例外:" + ex.getMessage());
ex.printStackTrace();
}
%>
</body></html>
java:comp/env/jdbc/MySQL,確認 web.xml 與 context.xml 名稱對應bind-address 設定finally 區塊關閉 Connection,或啟用 removeAbandoneduseUnicode=true&characterEncoding=utf8maxActive、maxIdle,避免過大造成資料庫連線數耗盡testOnBorrow、validationQuery="SELECT 1" 確保連線有效Tomcat 6 透過 context.xml 設定連線池簡潔明瞭,掌握此技能可快速完成專案資料庫整合。實務上建議進一步導入連線池監控與調優,確保高併發下的穩定性。