自己想实现一个数据库连接池,看了网上说的原理,但是有一些地方不太清楚。
连接池初始化不太难,根据配置生成一定数量的连接放在Vector或者栈里面。
但是,里面说的如果连接达到允许的最大值,就让用户等待,这个怎么实现的啊,怎么让用户等待呢?
还有就是一个连接使用完毕,怎么将它回收到连接池?如何判断这个连接是否使用完毕啊?难道要将一个连接与特定用户绑定起来吗,用户退出了 ,这个连接才释放?
连接池初始化不太难,根据配置生成一定数量的连接放在Vector或者栈里面。
但是,里面说的如果连接达到允许的最大值,就让用户等待,这个怎么实现的啊,怎么让用户等待呢?
还有就是一个连接使用完毕,怎么将它回收到连接池?如何判断这个连接是否使用完毕啊?难道要将一个连接与特定用户绑定起来吗,用户退出了 ,这个连接才释放?
解决方案 »
- JSP中文乱码问题!
- myeclipse停止weblogic10 错误
- [resin] resin或tomcat服务一启动,java.exe就出来了!
- ibatis调用oracle分页存储过程?
- HQL 语句里传递中文,为什么查询不出来?英文的就可以,急 在线等
- 如果使用JDOM生成XML文件的同时并且添加本地验证的XSD名称空间
- dwr2.0如何实现如何实现长连接
- getHibernateTemplate 是否用 释放数据库连接? 我们网站 总当机 我在找原因 我们对数据库操作都是用 getHibernateTemplate
- NB们,给我意见先
- 第一次使用JBUILDER+WebLogic创建EJB,遇到问题,求助!
- HTTP Status 500 -
- 用过 java prefuse 的高人请进.
比如,从你的连接池中取得连接的方法是getConnection();
1.当你在getConnection方法中判断连接被用完的时候,你可以阻塞线程。等待一定的时间后,再尝试取得。这样用户的pg那边就只能等待,直到你成功的取得连接返回给他。当然,你也可以设置最多尝试多少次。
2.更合理的方式,只要不能取得连接,就抛出一个异常。用户捕获异常后,wait()一定的时间,再尝试取得。还有就是一个连接使用完毕,怎么将它回收到连接池?
这个,你当然要开放一个方法,专门用来回收用完的连接。而不是直接让用户conn=null的方式解决。
2:连接池中连接可以已经存在很长时间了,数据库一般都会有个连接超时的,当连接超过超时时间时数据库会主动断开连接,连接池必须检查池中连接的健康状态
3:与数据库网络连接断开时,之后又重新连上了,那那些池中的连接该如何处理
4:当连接池中连接全部用完的时候,该采取什么策略
5:你的连接池是否实现了 javax.sql.DataSource 接口,这个接口连接池一般都应实现等等诸如此类的问题,要解决这些问题是比较棘手的!
网上那些所谓的连接池 100% 都有问题,要么设计有缺陷,就是很多东西没有考虑到,根据不能适用于正式环境开发。连接池的设计和实现都非常复杂,自己很难完成一个能够使用的连接池。建议看看一些常用的开源连接池:DBCP、C3P0、Proxool