參考:http://roadytulip.iteye.com/blog/693242
1、jar包:commons-logging.jar和proxool-0.9.1.jar、proxool-cglib.jar以及相應的數據庫驅動包
2、在WEB-INFO文件夾下新建proxool.xml文件,
<?xml version="1.0" encoding="GB2312"?>
<something-else-entirely>
<proxool>
<alias>mysql</alias> <!--數據源的別名-->
<driver-url>jdbc:mysql://127.0.0.1/base</driver-url><!--url連接串-->
<driver-class>org.gjt.mm.mysql.Driver</driver-class> <!--驅動類-->
<driver-properties>
<property name="user" value="root" /> <!--用戶名-->
<property name="password" value="root" /><!--密碼-->
</driver-properties>
<!--最大連接數(默認5個),超過了這個連接數,再有請求時,就排在隊列中等候,最大的等待請求數由maximum-new-connections決定 -->
<maximum-connection-count>100</maximum-connection-count>
<!--最小連接數(默認2個)-->
<minimum-connection-count>10</minimum-connection-count>
<!--proxool自動偵察各個連接狀態的時間間隔(毫秒),偵察到空閒的連接就馬上回收,超時的銷燬 默認30秒-->
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<!--沒有空閒連接可以分配而在隊列中等候的最大請求數,超過這個請求數的用戶連接就不會被接受-->
<maximum-new-connections>10</maximum-new-connections>
<!--最少保持的空閒連接數(默認2個)-->
<prototype-count>5</prototype-count>
<!--在使用之前測試-->
<test-before-use>true</test-before-use>
<!--用於保持連接的測試語句 -->
<house-keeping-test-sql>select NOW()</house-keeping-test-sql>
</proxool>
</something-else-entirely>
3、web.xml裏添加:
<!--proxool配置開始-->
<servlet>
<servlet-name>ServletConfigurator</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.configuration.ServletConfigurator</servlet-class>
<init-param>
<param-name>xmlFile</param-name>
<param-value>WEB-INF/proxool.xml</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>ProxoolAdmin</servlet-name>
<servlet-class>org.logicalcobwebs.proxool.admin.servlet.AdminServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProxoolAdmin</servlet-name>
<url-pattern>/ProxoolAdmin</url-pattern>
</servlet-mapping>
<!--proxool配置結束-->
4、創建連接類:
// FrontEnd Plus GUI for JAD
// DeCompiled : ConnManager.class
package myDB;
import java.sql.Connection;
import java.sql.DriverManager;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
public class ConnManager {
private static int activeCount = 0;
public ConnManager() {
}
public static Connection getConnection() {
Connection connection = null;
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
connection = DriverManager.getConnection("proxool.ds");
showSnapshotInfo();
} catch (Exception ex) {
ex.printStackTrace();
}
return connection;
}
/**
* 此方法可以得到連接池的信息 showSnapshotInfo
*/
private static void showSnapshotInfo() {
try {
SnapshotIF snapshot = ProxoolFacade.getSnapshot("ds", true);
int curActiveCount = snapshot.getActiveConnectionCount();// 獲得活動連接數
int availableCount = snapshot.getAvailableConnectionCount();// 獲得可得到的連接數
int maxCount = snapshot.getMaximumConnectionCount();// 獲得總連接數
if (curActiveCount != activeCount)// 當活動連接數變化時輸出的信息
{
System.out.println("活動連接數:" + curActiveCount
+ "(active) 可得到的連接數:" + availableCount
+ "(available) 總連接數:" + maxCount + "(max)");
activeCount = curActiveCount;
}
} catch (ProxoolException e) {
e.printStackTrace();
}
}
public static void releaseConnection(Connection connection) {
try {
if (connection != null) {
System.out.println("inConnManager=" + connection.hashCode());
connection.close();
connection = null;
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
5、添加測試方法
package test;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import myDB.ConnManager;
public class TestDB {
public void testDB() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = ConnManager.getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("select * from base.violation limit 0,20");
System.out.println("Results:");
int numcols = rs.getMetaData().getColumnCount();
while (rs.next()) {
for (int i = 1; i <= numcols; i++) {
System.out.print("\t" + rs.getString(i) + "\t");
}
System.out.println("");
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null)
rs.close();
if (stmt != null)
stmt.close();
if (conn != null)
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
6、在jsp裏調用
<%@ page import="test.TestDB"%>
<%@ page import="java.sql.*" %>
<%
TestDB ts = new TestDB();
ts.testDB();
%>