我爱Aspx >> Asp.Net >> 关于数据库连接池的难题,DBCP,想了一晚上。高分请高手指点。<property name="maxIdle"><value>30</value></property>
<property name="maxWait"><value>1000</value></property>
</bean>
但是我不想用Spring和Hibernate。
Spring和hibernate很占资源,不好控制。
第4楼. 由 rainv 于 2007-6-22 20:41:36 发表
这个问题很难吗?没人会阿~
第5楼. 由 zqpsswh 于 2007-6-23 15:00:28 发表
DBCP使用apache的对象池ObjectPool作为连接池的实现,在构造GenericObjectPool时,会生成一个内嵌类Evictor,实现自Runnable接口。如果_timeBetweenEvictionRunsMillis大于0,每过_timeBetweenEvictionRunsMillis毫秒Evictor会调用evict()方法,检查对象的闲置时间是否大于 _minEvictableIdleTimeMillis毫秒(_minEvictableIdleTimeMillis小于等于0时则忽略,默认为30分钟),是则销毁此对象,否则就激活并校验对象,然后调用ensureMinIdle方法检查确保池中对象个数不小于_minIdle。在调用returnObject方法把对象放回对象池,首先检查该对象是否有效,然后调用PoolableObjectFactory 的passivateObject方法使对象处于非活动状态。再检查对象池中对象个数是否小于_maxIdle,是则可以把此对象放回对象池,否则销毁此对象
还有几个很重要的属性,_testOnBorrow、_testOnReturn、_testWhileIdle,这些属性的意义是取得、返回对象和空闲时是否进行验证,检查对象是否有效,默认都为false即不验证。所以当使用DBCP时,数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际已经时无效的数据库连接了。网上很多说DBCP的bug应该都是如此吧,只有把这些属性设为true,再提供_validationQuery语句就可以保证数据库连接始终有效了,oracle数据库可以使用SELECT COUNT(*) FROM DUAL,不过DBCP要求_validationQuery语句查询的记录集必须不为空,可能这也可以算一个小小的BUG,其实只要_validationQuery语句执行通过就可以了。
Ҷƪл˵?
多表查询:用同一个SQL语句对两数..[07-06]
新手求助:怎么更新数据库的数据?[07-06]
在ACCESS2007怎么找不到UNIQUEID..[07-06]
Jtable & 数据库问题[07-06]
有多列数据显示,用什么,JList?..[07-06]
用 hibernate处理过单表数据超过..[07-06]
JSP 插入数据为什么ResultSet总是..[06-12]
Struts数据循环问题?[06-12]
JSP SQL数据链接类调用问题[06-12]
求救!ACCESS数据库中怎样读取月初..[06-12]
多表查询:用同一个SQL语句对两数..[07-06]
求教:我这段循环语句错在哪里的?[07-06]
最近几天在学STRUTS,有个超级菜..[07-06]
如何遍历窗体上的控件并按TYPE给..[07-06]
struts和hibernate简单问题[07-06]
用spring创建sessionFactory时的..[07-06]
正在做一个登录的程序,请教各位..[07-06]
兄弟们,求救了!如何让wince下地..[07-06]
net程序到底需不需要框架[07-06]
struts+hibernate+sql2000出现下..[07-06]