mm.mysql-2.0.14-bin.jar (MySQL JDBC Driver)$TOMCAT_HOME/common/lib/ 目錄在 </Host> 標籤前加入:
<!-- MySQL Database Connection Pool -->
<Context path="/APPLICATION_NAME"
docBase="APPLICATION_NAME"
debug="5"
reloadable="true"
crossContext="true">
<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log."
suffix=".txt"
timestamp="true"/>
<Resource name="jdbc/DATABASE_NAME"
auth="Container"
type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/DATABASE_NAME">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<!-- JDBC Driver Class -->
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<!-- Connection URL with autoReconnect -->
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/DATABASE_NAME?autoReconnect=true</value>
</parameter>
<parameter>
<name>username</name>
<value>DB_USERNAME</value>
</parameter>
<parameter>
<name>password</name>
<value>DB_PASSWORD</value>
</parameter>
<!-- Max connections in pool (0 = unlimited) -->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<!-- 其他常用參數 -->
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
<parameter>
<name>validationQuery</name>
<value>SELECT 1</value>
</parameter>
<parameter>
<name>testOnBorrow</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandoned</name>
<value>true</value>
</parameter>
<parameter>
<name>removeAbandonedTimeout</name>
<value>60</value>
</parameter>
<parameter>
<name>logAbandoned</name>
<value>true</value>
</parameter>
</ResourceParams>
</Context>
| 參數 | 說明 | 建議值 |
|---|---|---|
| maxActive | 連線池最大連線數 | 100 (視 MySQL max_connections 調整) |
| maxIdle | 最大閒置連線數 | 30 |
| maxWait | 取得連線最長等待毫秒數 | 10000 |
| validationQuery | 驗證連線有效性的查詢 | SELECT 1 |
| testOnBorrow | 借用連線時驗證 | true |
| removeAbandoned | 自動回收棄用連線 | true |
| autoReconnect | JDBC URL 參數,連線斷開自動重連 | true |
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
DataSource ds = (DataSource) envCtx.lookup("jdbc/DATABASE_NAME");
Connection conn = ds.getConnection();
// 使用連線...
conn.close(); // 歸還連線池,非關閉實體連線
<resource-ref>
<description>MySQL DBCP Connection Pool</description>
<res-ref-name>jdbc/DATABASE_NAME</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
max_connections 足夠大(含連線池數量 + 其他連線)commons-dbcp.jar、commons-pool.jar 至 common/libtestOnBorrow 與 validationQuery 防止斷線maxActive、maxIdle