大牛们,看过来:proxool连接池 获取连接时数组越界
如题:用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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
赶快更换为Druid吧
http://www.iteye.com/magazines/90
https://github.com/AlibabaTech/druid/wiki