2009-09-17 22:16
package com.job36.database;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.logicalcobwebs.proxool.ProxoolException;
import org.logicalcobwebs.proxool.ProxoolFacade;
import org.logicalcobwebs.proxool.admin.SnapshotIF;
public class ConnectionPool{
private static int activeCount = 0;
private static ConnectionPool instance;
public ConnectionPool() {
}
private void init() throws SQLException {
}
/**
* 返回唯一实例.如果是第一次调用此方法,则创建实例
*
* @return ConnectionPool 唯一实例
*/
public static ConnectionPool getInstance() {
if (instance == null) {
try {
instance = new ConnectionPool();
instance.init();
} catch (java.sql.SQLException sqle) {
System.out.println("getInstance() Exception1:"
+ sqle.toString());
}
}
return instance;
}
/**
* 获取连接 getConnection
*
* @param name
* @return
*/
public Connection getConnection() throws SQLException {
try {
Class.forName("org.logicalcobwebs.proxool.ProxoolDriver");
Connection conn = DriverManager.getConnection("proxool.DBPool");
showSnapshotInfo();
return conn;
} catch (Exception ex) {
System.out.println("获取连接失败..");
showSnapshotInfo();
ex.printStackTrace();
}
return null;
}
/**
* 此方法可以得到连接池的信息 showSnapshotInfo
*/
private void showSnapshotInfo() {
try {
SnapshotIF snapshot = ProxoolFacade.getSnapshot("DBPool", 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();
}
}
/**
* 获取连接 getConnection
*
* @param name
* @return
*/
public Connection getConnection(String name) throws SQLException {
return getConnection();
}
/**
* 释放连接 freeConnection
*
* @param conn
*/
public void free(Connection conn) {
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放连接 freeConnection
*
* @param name
* @param con
*/
public void freeConnection(String name, Connection con) {
free(con);
}
}
WEB.xml
<filter> <filter-name>AdminLoginFilter</filter-name> <filter-class> com.job36.filter.AdminLoginFilter </filter-class> </filter> <filter-mapping> <filter-name>AdminLoginFilter</filter-name> <url-pattern>/admin/*</url-pattern> </filter-mapping> <servlet> <servlet-name>ServletConfigurator</servlet-name> <servlet-class> org.logicalcobwebs.proxool.configuration.ServletConfigurator </servlet-class> <init-param> <param-name>propertyFile</param-name> <param-value> WEB-INF\classes\proxool.properties </param-value> </init-param> <load-on-startup>0</load-on-startup> </servlet> <servlet> <servlet-name>Admin</servlet-name> <servlet-class> org.logicalcobwebs.proxool.admin.servlet.AdminServlet </servlet-class> </servlet> <servlet-mapping> <servlet-name>Admin</servlet-name> <url-pattern>/job36/pool</url-pattern> </servlet-mapping>
proxool.properties文件
jdbc-0.proxool.alias=DBPool
jdbc-0.proxool.driver-url=jdbc:inetdae7:192.168.3.251:1433?database=blog&charset=GBK
jdbc-0.proxool.driver-class=com.inet.tds.TdsDriver
jdbc-0.user=sa
jdbc-0.password=job36web
jdbc-0.proxool.house-keeping-sleep-time=40000
jdbc-0.proxool.house-keeping-test-sql=SELECT ''
jdbc-0.proxool.maximum-connection-count=50
jdbc-0.proxool.minimum-connection-count=15
jdbc-0.proxool.maximum-connection-lifetime=18000000
jdbc-0.proxool.simultaneous-build-throttle=5
jdbc-0.proxool.recently-started-threshold=40000
jdbc-0.proxool.overload-without-refusal-lifetime=50000
jdbc-0.proxool.maximum-active-time=60000
jdbc-0.proxool.verbose=true
jdbc-0.proxool.trace=true
jdbc-0.proxool.fatal-sql-exception=Fatal error
jdbc-0.proxool.prototype-count=2
jdbc-0.proxool.statistics-log-level=ERROR