proxool连接池回收连接问题。
proxool连接池通过DriverManager.getConnection()得到连接,通过close()释放连接。按理来说,释放连接后,connection应该回到...
proxool连接池通过DriverManager.getConnection()得到连接,通过close()释放连接。
按理来说,释放连接后,connection应该回到池中,但是这里是直接把连接销毁了,应该怎么样才可以让连接回到池中?
还是说,proxool没有连接池的功能,要用第三方连接池?
谢谢,我看了proxool的源码,发现proxool是有连接池的,不过连接池是在DriverManager后面,而其它连接池(如c3p0)是在DriverManager前面。也就是proxool是通过DriverManager得到一个已经初始化的连接,而c3p0是将DriverManager初始化的连接放入DataSource中,然后在DataSource中取得。 展开
按理来说,释放连接后,connection应该回到池中,但是这里是直接把连接销毁了,应该怎么样才可以让连接回到池中?
还是说,proxool没有连接池的功能,要用第三方连接池?
谢谢,我看了proxool的源码,发现proxool是有连接池的,不过连接池是在DriverManager后面,而其它连接池(如c3p0)是在DriverManager前面。也就是proxool是通过DriverManager得到一个已经初始化的连接,而c3p0是将DriverManager初始化的连接放入DataSource中,然后在DataSource中取得。 展开
2个回答
展开全部
究其原因锁定为连接池配置。
公司的程序是一直和数据库做交互的。当程序运行过程中,我停掉数据库服务,本应看到:
com.microsoft.sqlserver.jdbc.SQLServerException: 到主机?? 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect
链接失败的异常,但是程序并没有抛出这个异常,而是链接成功。只是在从数据库中取数据时发生问题抛出如下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error
可惜头脑简单的我在网上狂找socket write error这个问题出现的原因和解决办法。“这个问题一般是客户端在连接还没有完全建立的时候就取消连接,比如用户按了浏览器上面的“停止”按钮,一般来说没有什么问题。但是如果频繁出现,就表示很多客户端连接到Apache服务器的响应时间太长了,可能是网络的问题或者服务器性能问题????
可能你的网络连接存在一些问题,你的数据传输的时候,可能由于时间等待的太久,但是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()问题搞定。此错误搞定
公司的程序是一直和数据库做交互的。当程序运行过程中,我停掉数据库服务,本应看到:
com.microsoft.sqlserver.jdbc.SQLServerException: 到主机?? 的 TCP/IP 连接失败。 java.net.ConnectException: Connection refused: connect
链接失败的异常,但是程序并没有抛出这个异常,而是链接成功。只是在从数据库中取数据时发生问题抛出如下错误:
com.microsoft.sqlserver.jdbc.SQLServerException: Connection reset by peer: socket write error
可惜头脑简单的我在网上狂找socket write error这个问题出现的原因和解决办法。“这个问题一般是客户端在连接还没有完全建立的时候就取消连接,比如用户按了浏览器上面的“停止”按钮,一般来说没有什么问题。但是如果频繁出现,就表示很多客户端连接到Apache服务器的响应时间太长了,可能是网络的问题或者服务器性能问题????
可能你的网络连接存在一些问题,你的数据传输的时候,可能由于时间等待的太久,但是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()问题搞定。此错误搞定
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询