(J2EE)关于 proxool 连接池自动断开连接的问题

数据持久层使用Hibernate3.1连接池使用了Proxool0.8.3症状描述:正常操作没有问题,如果过上一段时间不操作,比较机器闲置半小时(TOMCAT容器正常工作... 数据持久层使用 Hibernate 3.1
连接池使用了 Proxool 0.8.3

症状描述: 正常操作没有问题,如果过上一段时间不操作,比较机器闲置半小时(TOMCAT容器正常工作)左右,当你再次操作的时候,报500错误,说connection.close()方法已经被执行。错误详情如下:

ERROR[http-8080-Processor23](StandardWrapperValve.java:253)-Servlet.service() for servlet action threw exception
com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: Connection.close() has already been called. Invalid operation in this state.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:981)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:957)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:927)
at com.mysql.jdbc.ConnectionImpl.getMutex
.......

--------------------------------------------------------
下面是proxool的配置文件,贴出来:

<?xml version="1.0" encoding="UTF-8"?>

<something-else-entirely>

<proxool>
<alias>dbpool</alias>
<driver-url>jdbc:mysql://localhost:3306/db_puaite?useUnicode=true&characterEncoding=utf-8</driver-url>
<driver-class>org.gjt.mm.mysql.Driver</driver-class>
<driver-properties>
<property name="user" value="root" />
<property name="password" value="186899" />
</driver-properties>
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
<maximum-active-time>60000</maximum-active-time>
<maximum-new-connections>100</maximum-new-connections>
<prototype-count>5</prototype-count>

<maximum-connection-count>50</maximum-connection-count>
<minimum-connection-count>10</minimum-connection-count>
</proxool>

</something-else-entirely>
展开
 我来答
鼎硕元音乐甄选
推荐于2016-01-26 · TA获得超过3461个赞
知道小有建树答主
回答量:310
采纳率:33%
帮助的人:134万
展开全部
楼主问的是: proxool隔一段时间之后自动断开连接的问题,而不是如何使用的问题。所以说 一楼的答案没有切中要害。

ljf113190451 给出的地址,就是演示了在传统的JDBC下如何使用proxool,而且在他这个演示的配置中,也存在和楼主一样的问题,看看他的配置:

<maximum-active-time>30000</maximum-active-time>

在看看楼主的配置:
<maximum-active-time>60000</maximum-active-time>

这个配置的意思就是,house会自动检测每一个线程的连接时间,如果有一个线程的连接时间超过了这个配置的时间(ms),那么house会自动杀掉该线程,不管该线程是不是active的照杀不误。所以楼主隔一段时间之后,在操作就会提示connection.close()方法已经被调用,并返回500错误的提示。因为这个线程已经被杀掉,关闭了和数据库的连接。如果在开辟一个新的线程来访问,就不会出错了。
chensong0609
2009-05-06 · 贡献了超过121个回答
知道答主
回答量:121
采纳率:0%
帮助的人:23.9万
展开全部
<house-keeping-sleep-time>90000</house-keeping-sleep-time>
显示proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁
你设置的<maximum-active-time>60000</maximum-active-time>
超过了最大活动时间,出现断开连接的错误。
补充经常出现的问题:
1)<alias>DBPool</alias>这个是给连接池取一个别名,在hibernate配置文件中将引用这个别名。

2)<driver-url>jdbc:mysql://localhost:3306/工程名?useUnicode=true&characterEncoding=UTF-8</driver-url>

这个是驱动的路径,我们的项目采用了mysql,使用其余数据库需要更改成对应的。还有需要注意的是工程名要以数据库名为准。

3)<driver-class>om.mysql.jdbc.Driver</driver-class>

这个是数据库驱动类,不同的数据库采用不同的驱动类,即使采用同一种数据库也有多种驱动类,所以一定要选取准确。

4) <driver-properties>
<propertyname="user"value="*** "/>
<propertyname="password"value="*** "/>
</driver-properties>

这个显示数据库的用户名和密码。

5)<house-keeping-sleep-time>90000</house-keeping-sleep-time>

这个显示proxool自动侦察各个连接状态的时间间隔(毫秒),侦察到空闲的连接就马上回收,超时的销毁

6)<maximum-new-connections>20</maximum-new-connections>

这个 指因未有空闲连接可以分配而在队列中等候的最大请求数,超过这个请求数的用户连接就不会被接受

7)<prototype-count>5</prototype-count>

这个显示最少保持的空闲连接数

8)<maximum-connection-count>100</maximum-connection-count>

这个显示允许最大连接数,超过了这个连接,再有请求时,就排在队列中等候,最大的等待请求数由maximum-new-connections决定

9)<minimum-connection-count>10</minimum-connection-count>

这个显示最小连接数
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ljf113190451
2013-07-29 · TA获得超过1026个赞
知道答主
回答量:287
采纳率:0%
帮助的人:0
展开全部
这里有比较详细的介绍
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式