proxool數據連接池

參考: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();
%>


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章