数据库连接池学习笔记

连接池源代码请参看前一篇博文

 

 

连接池管理类中的属性:

private int clients; //  

    private Vector drivers = new Vector();   

    private PrintWriter log;   

     private Hashtable pools = new Hashtable();   

内部类DBConnectionPool的属性:

private int checkedOut; // 当前连接数  

    private Vector freeConnections = new Vector(); // 保存所有可用连接  

    private int maxConn; // 此连接池允许建立的最大连接数  

    private String name; // 连接池名字  

    private String password; // 密码或null  

    private String URL; // 数据库的JDBC URL  

    private String user; // 数据库账号或null  

  

新建数据库连接池管理类:

调用static synchronized public DBConnectionManager getInstance()获取管理类的实例, 有就直接返回,没有创建一个。保证只有一个实例,通过client记录共有几个用户

没有创建管理类时调用private DBConnectionManager(),它调用Init()读取配置文件,调用loadDrivers(dbProps)注册和记录驱动程序。调用createPools(dbProps);循环获取url和用户名密码,并新建DBConnectionPool加入到pools中,这里可以在配置文件中多配置几个连接池,这里就会创建几个连接池,连接池的创建只在新建连接池管理类(即第一次获取管理类)的时候由调用init创建

获取连接:

通过管理类实例调用Connection getConnection(String name, long time) 获取名为name连接池pool,并调用连接池poolgetConnection(String name, long time) 方法获取数据库连接。time变量可选,为时间限制,当没有time变量时,getConnection会取freeConnections中的空闲连接,若没有且没有到达最大的连接数,就会创建一个新连接返回,否则返回null。当有time时会调用上面的getConnection(String name)方法,若返回null,则当前线程会waittime)时间,在这期间等待freeConnection(Connection con) 释放一个连接后将其唤醒。若超过time时间,则返回null。

释放连接:

通过管理类实例调用freeConnection(String name, Connection con)获取名为name连接池pool,并调用连接池poolfreeConnection(Connection con), freeConnections.addElement(con);con连接放进空闲连接链中,并checkedOut--;notifyAll();唤醒等待队列中的线程。

释放连接池管理类:

通过管理类实例调用 public synchronized void release() ,判断--clients是否为空,若不为空直接return,否则循环获取所有pool,并调用pool的 release() 方法循环释放调pool中的所有连接(con.close();),释放完所有pool后再循环调用DriverManager.deregisterDriver(driver); 释放掉所有注册driver

<!--EndFragment-->
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值