快速业务通道

数据库连接池Java实现小结 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
ava

package scut.ailab.connectionpool; /** * @author youyongming * */ import java.util.LinkedHashSet; import java.sql.*; import java.util.Iterator; public class ConnectionFactory { private static ConnectionFactory m_instance = null; //在使用的连接池 private LinkedHashSet ConnectionPool = null; //空闲连接池 private LinkedHashSet FreeConnectionPool = null; //最大连接数 private int MaxConnectionCount = 4; //最小连接数 private int MinConnectionCount = 2; //当前连接数 private int current_conn_count = 0; //连接参数 private ConnectionParam connparam = null; //是否创建工厂的标志 private boolean isflag = false; //是否支持事务 private boolean supportTransaction = false; //定义管理策略 private int ManageType = 0; private ConnectionFactory(){   ConnectionPool = new LinkedHashSet();   FreeConnectionPool = new LinkedHashSet(); } /**   * 使用指定的参数创建一个连接池   */ public ConnectionFactory(ConnectionParam param, FactoryParam fparam)   throws SQLException {   //不允许参数为空   if ((param == null)||(fparam == null))   throw new SQLException("ConnectionParam和FactoryParam不能为空");   if (m_instance == null)   {   synchronized(ConnectionFactory.class){    if (m_instance == null)    {    //new instance    //参数定制    m_instance = new ConnectionFactory();    m_instance.connparam = param;    m_instance.MaxConnectionCount = fparam.getMaxConn();    m_instance.MinConnectionCount = fparam.getMinConn();    m_instance.ManageType = fparam.getType();    m_instance.isflag = true;    //初始化,创建MinConnectionCount个连接    System.out.println("connection factory 创建!");    try{     for (int i=0; i < m_instance.MinConnectionCount; i++)     {     _Connection _conn = _Connection.getConnection(m_instance, m_instance.connparam);     if (_conn == null) continue;     System.out.println("connection创建");     m_instance.FreeConnectionPool.add(_conn);//加入空闲连接池     m_instance.current_conn_count ++;     //标志是否支持事务     m_instance.supportTransaction = _conn.isSupportTransaction();     }    }    catch(Exception e)    {     e.printStackTrace();    }    //根据策略判断是否需要查询    if (m_instance.ManageType != 0)    {     Thread t = new Thread(new FactoryMangeThread(m_instance));     t.start();    }    }   }   } } /**   * 标志工厂是否已经创建   * @return boolean   */ public boolean isCreate() {   return m_instance.isflag; } /**   * 从连接池中取一个空闲的连接   * @return Connection   * @throws SQLException   */ public synchronized Connection getFreeConnection()   throws SQLException {   Connection conn = null;   //获取空闲连接   Iterator iter = m_instance.FreeConnectionPool.iterator();   while(iter.hasNext()){   _Connection _conn = (_Connection)iter.next();   //找到未用连接   if(!_conn.isFree()){    conn = _conn.getFreeConnection();    _conn.setIsFree(true);    //移出空闲区    m_instance.FreeConnectionPool.remove(_c

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号