Tomcat 內置 DBCP 連接池,通過 JNDI 數據源方式為 Web 應用提供高性能數據庫連接。本文以 Tomcat 5.0 + MySQL 5 + Eclipse/MyEclipse 為環境,手把手演示從創建項目、配置數據源、web.xml 引用到代碼獲取連接的全流程,並附帶測試驗證與配置文件解析。
mysql-connector-java-3.1.12-bin.jar將驅動包放入 %TOMCAT_HOME%/common/lib。
ConnectorPoolhttps://127.0.0.1:8080/ConnectorPool/ 見默認頁面 → 部署成功https://127.0.0.1:8080/admin/,用 tomcat-users.xml 配置的帳號登錄Tomcat Server → Service (Catalina) → Host (localhost) → Context (/ConnectorPool) → Resources → Data Sourcesjdbc/testpooljdbc:mysql://localhost:3306/conpoolcom.mysql.jdbc.DriverrootmaxActive=4、maxIdle=2、maxWait=5000)<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/testpool</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/testpool");
Connection conn = ds.getConnection();
// 業務操作...
conn.close(); // 歸還池,非物理關閉
conpool,表 test(id varchar(12)),數據:001/002/003<%@ page import="java.sql.*, javax.sql.*, javax.naming.*" %>
<%
out.print("beginning testing...<br>");
DataSource ds = null;
try {
InitialContext ctx = new InitialContext();
ds = (DataSource) ctx.lookup("java:comp/env/jdbc/testpool");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from test");
while (rs.next()) { out.print(rs.getString(1) + "<br>"); }
out.print("end testing.");
} catch (Exception ex) { out.print("error:" + ex.getMessage()); ex.printStackTrace(); }
%>
beginning testing... 001 002 003 end testing.
部署後自動生成 %TOMCAT_HOME%/conf/Catalina/localhost/ConnectorPool.xml:
<Context docBase="ConnectorPool" path="/ConnectorPool" ...>
<Resource auth="Container" description="DB Connection" name="jdbc/testpool" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/testpool">
<parameter><name>driverClassName</name><value>com.mysql.jdbc.Driver</value></parameter>
<parameter><name>url</name><value>jdbc:mysql://localhost:3306/conpool</value></parameter>
<parameter><name>username</name><value>root</value></parameter>
<parameter><name>password</name><value>root</value></parameter>
<parameter><name>maxActive</name><value>4</value></parameter>
<parameter><name>maxIdle</name><value>2</value></parameter>
<parameter><name>maxWait</name><value>5000</value></parameter>
</ResourceParams>
</Context>
| 參數 | 含義 |
|---|---|
driverClassName | JDBC 驅動全限定類名 |
maxActive | 最大活躍連接數(含閒置+使用中) |
maxIdle | 最大閒置連接數 |
maxWait | 獲取連接最長等待毫秒數 |
validationQuery | 驗證連接有效性的 SQL(如 SELECT 1) |
java:comp/env/ 前綴close() 歸還池,否則洩漏導致池耗盡