Hibernate官网指出 hibernate3之后将不再支持dbcp连接池,因为其自身bug太多。虽然我们hyi站点仍然使用的是hibernate2的版本,那也不排除dbcp连接池自身问题。
速度上虽然DBCP比C3P0快些,但是有BUG:当DBCP建立的数据库连接,因为某种原因断掉后,DBCP将不会再重新创建新的连接,导致必须重新启动To mcat才能解决问题。
如果暂时无法升级连接池的情况下,我完善了一下 dbcp连接池的配置。
一,最小空闲连接由 1 调整为2.。(尽量保证连接池中始终保持 1-2个连接)
二,进行连接空闲时间判断配置,时间间隔为5分钟。
<property name="minEvictableIdleTimeMillis">
<value>5</value>
</property>
三,加入初始化连接数 3。dbcp从1.2开始有支持initialSize属性
<property name="initialSize">
<value>3</value>
</property>
四,在使用DBCP的时候,以下属性如果使用默认值,则数据库连接因为某种原因断掉后,再从连接池中取得连接又不进行验证,这时取得的连接实际上就会是无效的数据库连接。因此为了防止获得的数据库连接失效,在使用的时候最好检测连接对象以及返回对象
<property name="testOnBorrow"><!--取得对象时是否进行验证,检查对象是否有效 -->
<value>true</value>
</property>
<property name="testWhileIdle"><!--空闲时是否进行验证,检查对象是否有效 -->
<value>true</value>
</property>
<property name="testOnReturn"><!--返回对象时是否进行验证 -->
<value>true</value>
</property>
<!--强制自我中断避免dbcp自身bug出现连接过久资源耗尽-->
<property name="removeAbandoned">
<value>true</value>
</property>
<!--自我中断时间秒 -->
<property name="removeAbandonedTimeout">
<value>300</value>
</property>
<!--记录中断事件 -->
<property name="logAbandoned">
<value>true</value>
</property>