mysql No operations allowed after connection closed连接异常

问题描述:项目中使用了mysql+c3p0,部署完后当天没有出异常,第二天访问时报异常

                异常描述 No operations allowed after connection closed

原因:MySQL5.0以后针对超长时间DB连接做了一个处理,Mysql服务器默认的“wait_timeout”是8小时,也就是说一个connection空闲超过8个小时,Mysql将自动断开该 connection。这就是问题的所在,在C3P0 pools中的connections如果空闲超过8小时,Mysql将其断开,而C3P0并不知道该connection已经失效,如果这时有 Client请求connection,C3P0将该失效的Connection提供给Client,将会造成上面的异常。

解决的方法有3种:

         增加wait_timeout的时间。

         减少Connection pools中connection的lifetime。

         测试Connection pools中connection的有效性。

C3P0增加以下配置信息:

//获取connnection时测试是否有效

testConnectionOnCheckin = true

//自动测试的table名称

automaticTestTable=C3P0TestTable

//set to something much less than wait_timeout, prevents connections from going stale

idleConnectionTestPeriod = 18000

//set to something slightly less than wait_timeout, preventing 'stale' connections from being handed out

maxIdleTime = 25000

//if you can take the performance 'hit', set to "true"

testConnectionOnCheckout = true


原文:http://www.blogjava.net/Alpha/archive/2009/03/29/262789.html

你可能感兴趣的:(MySQL)