大牛们,看过来:proxool连接池 获取连接时数组越界

发布于 2021-11-11 12:00:00 字数 3636 浏览 798 评论 1

如题:用proxool连接池时产生如下错误,不知道是什么原因?
按照常理来说这是不可能,获取连接时,连接池的大小是 17,怎么会直接指向 20,而不是:18呢?

我在程序中只是用hiberante的 Configuration 对象创建了SessionFactory,然后用它创建了连接。
我是用proxool连接池,中间层用了hibernate,指定用的连接池是proxool,最后是用hibernate框架提供的接口实例化,是在使用的hibernate去查询数据库的时候,报了以下的错误。

org.logicalcobwebs.proxool.hibernatePool -1585946 [Thread-165] ERROR org.logicalcobwebs.proxool.hibernatePool  - Problem getting connection  
java.lang.IndexOutOfBoundsException: Index: 20, Size: 17  
at java.util.ArrayList.RangeCheck(ArrayList.java:556)  
at java.util.ArrayList.get(ArrayList.java:331)  
at org.logicalcobwebs.proxool.util.FastArrayList.get(FastArrayList.java:475)  
at org.logicalcobwebs.proxool.ConnectionPool.getConnection(ConnectionPool.java:195)  
at org.logicalcobwebs.proxool.ProxoolDriver.connect(ProxoolDriver.java:89)  
at java.sql.DriverManager.getConnection(DriverManager.java:582)  
at java.sql.DriverManager.getConnection(DriverManager.java:207)  
at org.hibernate.connection.ProxoolConnectionProvider.getConnection(ProxoolConnectionProvider.java:53)  
at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:298)  
at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:110)  
at org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:88)  
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1162)  
at org.hibernate.loader.Loader.doQuery(Loader.java:390)  
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)  
at org.hibernate.loader.Loader.doList(Loader.java:1593)  
at org.hibernate.loader.Loader.list(Loader.java:1577)  
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395)  
at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271)  
at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844)  
at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74) 

连接池的配置如下: 

 

 

  <proxool>   
        <alias>hibernatePool</alias>   
        <driver-url>jdbc:db2://...</driver-url>
        <driver-class>com.ibm.db2.jcc.DB2Driver</driver-class>
        <driver-properties>
           <property name="user" value="user"/>
           <property name="password" value="password"/>
        </driver-properties>    
        <!--最大连接数(默认5个),超过了这个连接数,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定  -->  
        <maximum-connection-count>400</maximum-connection-count>
        <!--最小连接数(默认2个) -->  
        <minimum-connection-count>0</minimum-connection-count>    
        <!--proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁 默认30秒 -->  
        <house-keeping-sleep-time>90000</house-keeping-sleep-time>  
        <!-- 如果housekeeper 检测到某个线程的活动时间大于这个数值.它将会杀掉这个线程.所以确认一下你的服务器的带宽.然后定一个合适的值.默认是5分钟,单位毫秒  -->  
        <maximum-active-time>172800000</maximum-active-time>
        <!-- 一次产生连接的数量 -->   
        <simultaneous-build-throttle>10</simultaneous-build-throttle>        
        <!-- 一个线程的最大寿命  -->
        <maximum-connection-lifetime>172800000</maximum-connection-lifetime>
        <!--最少保持的空闲连接数(默认2个) -->  
        <prototype-count>0</prototype-count>    
        <!--在使用之前测试 -->  
        <test-before-use>true</test-before-use>  
        <!--用于保持连接的测试语句 -->
        <house-keeping-test-sql>select id from tablename</house-keeping-test-sql>  
    </proxool> 

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文