package com.landraydev.jdbc;
import java.sql.Connection;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Vector;
public class DBConnectionPoolManager {
static private DBConnectionPoolManager instance;
static private int clients;
private Vector dbdrivers = new Vector();
private Hashtable pools = new Hashtable();
/*
* 连接池管理类实例化 注释:进行连接池资源的统一管理
*/
private DBConnectionPoolManager() {
// TODO Auto-generated constructor stub
this.InitPools();
}
/*
* 统一管理类实例进行连接池管理 注释:
*/
static synchronized public DBConnectionPoolManager getInstance() {
if (instance != null) {
clients++;
} else {
instance = new DBConnectionPoolManager();
clients++;
}
return instance;
}
/*
* 初始化资源池 注释:根据系统中设置的数据库驱动信息,初始化连接池
*/
private void InitPools() {
// TODO Auto-generated method stub
this.loadDBDrvers();
Iterator alldbdrivers = dbdrivers.iterator();
while (alldbdrivers.hasNext()) {
this.createPool((DBConfig) alldbdrivers.next());
System.out.println("创建资源池");
}
System.out.println("资源池创初始化完成!");
}
/*
* 创建指定数据库连接池 注释:根据数据库驱动对象来创建连接池资源
*/
private void createPool(DBConfig dbconfig) {
// TODO Auto-generated method stub
DBConnectionPool dbcp = new DBConnectionPool(dbconfig.getPoolname(),
dbconfig.getDbdriver(), dbconfig.getDburl(),
dbconfig.getDbuser(), dbconfig.getDbpassword(),
dbconfig.getMaxconn());
this.pools.put(dbconfig.getPoolname(), dbcp);
}
/*
* 加载配置信息中的数据库驱动信息 注释:加载外部文件中数据库驱动信息,后续支持外置文件
*/
private void loadDBDrvers() {
// TODO Auto-generated method stub
String driverName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
String dbURL = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=DataCenter";
String userName = "sa";
String userPwd = "password";
String dbURL1 = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=jdbc";
String dbURL2 = "jdbc:jtds:sqlserver://127.0.0.1:1433/DataCenter";
DBConfig sql1 = new DBConfig("sqlserver1", driverName, dbURL, userName,
userPwd, 2);
DBConfig sql2 = new DBConfig("sqlserver2", driverName, dbURL1,
userName, userPwd, 1);
DBConfig sql3 = new DBConfig("sqlserver3", driverName, dbURL2,
userName, userPwd, 1);
this.dbdrivers.add(sql1);
this.dbdrivers.add(sql2);
this.dbdrivers.add(sql3);
}
/*
* 获取指定资源池中的链接资源
*/
public Connection getPoolConnection(String poolname) {
DBConnectionPool pool = null;
Connection con = null;
pool = (DBConnectionPool) pools.get(poolname);
con = pool.getConnection();
if (con != null)
System.out.println("获取连接资源");
return con;
}
/*
* 规定时间内获取指定连接池中的连接资源 注释:timeout 单位 为毫秒
*/
public Connection getPoolConnection(String poolname, long timeout) {
DBConnectionPool pool = null;
Connection con = null;
pool = (DBConnectionPool) pools.get(poolname);
con = pool.getConnection(timeout);
if (con != null)
System.out.println("已获取连接池:" + poolname + "连接资源!");
return con;
}
/*
* 返还连接资源给指定连接池 注释:连接资源使用完后,将连接资源返还给连接池,给其他业务使用
*/
public void freePoolConnection(String poolname, Connection conn) {
DBConnectionPool pool = (DBConnectionPool) pools.get(poolname);
if (pool != null)
pool.freeConnection(conn);
clients--;
}
/*
* 释放指定连接池中的所有连接资源 注释:释放当前连接池中闲置的连接资源
*/
public void releaseConnectionPool(String poolname) {
DBConnectionPool pool = (DBConnectionPool) pools.get(poolname);
if (pool != null)
pool.releasePool();
}
/**
* @param clients
* the clients to set
* @return
*/
public static int getClients() {
return clients;
}
}
添加新评论0 条评论