hibernate + dbcp
hibernate + dbcp
0o明天会更好o0 发表于3年前
hibernate + dbcp
  • 发表于 3年前
  • 阅读 19
  • 收藏 0
  • 点赞 0
  • 评论 0
摘要: XXXX系统持久层使用hibernate数据源使用dbcp所引发的问题,导致session未关闭,oracle游标超出最大值


之前的数据源配置信息如下


    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="${jdbc.driverClassName}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <property name="maxActive" value="${jdbc.maxActive}"/>
        <property name="maxIdle" value="${jdbc.maxIdle}"/>
        <property name="maxWait" value="${jdbc.maxWait}"/>
        <property name="poolPreparedStatements" value="true"/>
        <property name="defaultAutoCommit" value="true"/>
        <property name="testOnBorrow" value="true"/>
        <property name="maxOpenPreparedStatements" value="900"/>
    </bean>


解决方案目前有两种方法可以解决oracle游标超出300的错误。


1、从poolPreparedStatements后,删除所有的节点替换为如下的属性

        <!-- 连接被泄露时是否打印 -->  
        <property name="logAbandoned" value="true"/>  
        <!--removeAbandoned: 是否自动回收超时连接-->    
        <property name="removeAbandoned"  value="true"/>  
        <!--removeAbandonedTimeout: 超时时间(以秒数为单位)-->    
        <property name="removeAbandonedTimeout" value="10"/>  
        <!-- 在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位. -->  
        <property name="timeBetweenEvictionRunsMillis" value="10000"/>  
        <!--  在每次空闲连接回收器线程(如果有)运行时检查的连接数量 -->  
        <property name="numTestsPerEvictionRun" value="10"/>  
        <!-- 1000 * 60 * 30  连接在池中保持空闲而不被空闲连接回收器线程-->  
        <property name="minEvictableIdleTimeMillis" value="10000"/>


2、poolPreparedStatements属性设置为false,删除

 <property name="poolPreparedStatements" value="false"/>
<property name="maxOpenPreparedStatements" value="900"/>


问题解决了,如下图


共有 人打赏支持
粉丝 2
博文 1
码字总数 320
×
0o明天会更好o0
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: