• λ我爱Aspx >> Asp.Net >> 关于数据库连接池的难题,DBCP,想了一晚上。高分请高手指点。
  • 关于数据库连接池的难题,DBCP,想了一晚上。高分请高手指点。

  • :aspxer  Դ:csdn  :2007-7-6 2:38:02  ؼ:数据库,数据
  • <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语句执行通过就可以了。

    Ҷƪл˵?
  • һƪhibernate如何读取ORACL中的blob数据?
    һƪ多表查询:用同一个SQL语句对两数据表各有一字段分别求和?