Domino-斌少
作者Domino-斌少·2013-08-19 12:56
软件开发工程师·世强先进

JDBC&连接池 数据交互改造之旅- 连接池管理类(配置硬编码版)

字数 4468阅读 2116评论 0赞 0
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

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广