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

作者&投稿:锻朱 (若有异议请与网页底部的电邮联系)
在使用Proxool连接池遇到的几点问题及解决办法~

究其原因锁定为连接池配置。公司的程序是一直和数据库做交互的。当程序运行过程中,我停掉数据库服务,本应看到:com.microsoft.sqlserver.jdbc.SQLServerException: 到主机�0�2 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect链接失败的异常,但是程序并没有抛出这个异常,而是链接成功。只是在从数据库中取数据时发生问题抛出如下错误:com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error可惜头脑简单的我在网上狂找socket write error这个问题出现的原因和解决办法。“这个问题一般是客户端在连接还没有完全建立的时候就取消连接,比如用户按了浏览器上面的“停止”按钮,一般来说没有什么问题。但是如果频繁出现,就表示很多客户端连接到Apache服务器的响应时间太长了,可能是网络的问题或者服务器性能问题�0�2�0�2可能你的网络连接存在一些问题,你的数据传输的时候,可能由于时间等待的太久,但是server段设置的连接检验时间限制一定,那么就可能出现这种情况的!不过更常见的原因是:1:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;2:客户关掉了浏览器,而服务器还在给客户端发送数据;3:浏览器端按了Stop;4:服务器给客户端响应结果给防火墙拦截了。”但是程序是并不是web程序。仔细想了想问题应该不是这个。然后通过看Proxool连接池配置和此问题的原因,我马上又锁定Proxool配置中的“house-keeping-sleep-time”这项配置。但是把时间调短还是不能解决问题。没办法只好继续在网上找。看到有些文中指出添加test-before-use配置,即每次取出连接都检查连接是否可用,就可以做到让连接池实现在故障恢复后自动重连接但是我添加后还是抛出错误。而且是程序已启动就抛出错误java.sql.SQLException: Created a new connection but it failed its test看配置才知道有这么一项配置:house-keeping-test-sql看网上90%的讲proxool的配置的文章test语句都是这个:select CURRENT_DATE就连我要改的程序中的也是配置成这个语句,哎。copy,绝对的copy因为我们公司用的是sql server2005,select CURRENT_DATE这个语句在mssql上根本就是错误的。改成select getdate()问题搞定。此错误搞定�0�2�0�2

那是肯帝的,因为一般的连接池都和tomcat用所以必须启动tomcat才行。
在主方法里测试是没用的。

楼主问的是: 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错误的提示。因为这个线程已经被杀掉,关闭了和数据库的连接。如果在开辟一个新的线程来访问,就不会出错了。

<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>

这个显示最小连接数

这里有比较详细的介绍


开福区18389618618: (J2EE)关于 proxool 连接池自动断开连接的问题 -
督爽因瑞: 楼主问的是: proxool隔一段时间之后自动断开连接的问题,而不是如何使用的问题.所以说 一楼的答案没有切中要害.ljf113190451 给出的地址,就是演示了在传统的JDBC下如何使用proxool,而且在他这个演示的配置中,也存在和楼主一样...

开福区18389618618: java中的c3p0和proxool都分别是什么 能详细介绍一下么 -
督爽因瑞: 两个都是开源数据库连接池框架, JDBC连接你应该知道.连接池是为了避免过多的开启数据库链接导致的资源消耗,由连接池在系统创建初始创建一定数量的数据库连接放到连接池中,这些连接的数量是由最小数据库连接数来设定的,无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量.连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中.其实就是为了节约资源 数据库框架hibernate就都支持这两个连接池

开福区18389618618: 请问j2ee的这两个配置文件各具体配置的什么东西? -
督爽因瑞: 第一个应该是配置spring的各种bean及依赖关系,第二个应该是数据库连接池的配置

开福区18389618618: jsp中config内置对象 -
督爽因瑞: 所谓内置对象就是jsp自身的对象不用得到就可以直接用,${config.xxxx}或者

开福区18389618618: 怎样在spring中配置proxool数据源 -
督爽因瑞: spring中使用proxool作数据源连接池的配置,小抄一个

开福区18389618618: proxool是什么,一般怎么读? -
督爽因瑞: proxool是一个连接池的类库,读音这个真是因人而异的,不过由于从拼写看类似于pool(池子),所以我个人认为他的读音应该和pool很相近,我一般读成pro ke si ou,高手勿见笑...

开福区18389618618: proxool连接池问题
督爽因瑞: 根据我的经验,你的代码中相关的数据库操作可能是在获取到数据库连接池中的资源使用后未释放回池中造成的数据源资源浪费或被占用.

开福区18389618618: proxool连接池问题? -
督爽因瑞: 对的..只要conn.close();就可以把 conn 归还给连接池!!最好把 rs.close(); stmt.close(); 也关闭掉..祝楼主早日成功!

开福区18389618618: proxool读音 -
督爽因瑞: 1、proxool读音: ['proksl] 2、Proxool是一种Java数据库连接池技术.sourceforge下的一个开源项目,这个项目提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况.

开福区18389618618: 在使用Proxool连接池遇到的几点问题及解决办法 -
督爽因瑞: 近期公司一个项目让我修改,程序总是在数据库服务重启的情况下出问题.究其原因锁定为连接池配置.公司的程序是一直和数据库做交互的.当程序运行过程中,我停掉数据库服务,本应看到:com.microsoft.sqlserver.jdbc....

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网