易截截图软件、单文件、免安装、纯绿色、仅160KB

使用C3P0连接Mysql的一个问题的解决过程


最近的一个项目在使用C3P0的连接池,数据库为Mysql。开发测试没有问题,在运行中每个一段长的空闲时间就出现异常Communications link failure due to underlying exception:
java 代码
查看了Mysql的文档,以及Connector/J的文档以及在线说明发现,出现这种异常的原因是:
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的有效性。
当然最好的办法是同时综合使用上述3种方法,假设wait_timeout为默认的8小时
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
更多的配置信息大家可以查看C3P0文档,Connector/J文档,


相关文档:

mysql容易被忽略的用法

1.在创建表的同时创建索引
  CREATE TABLE material(id INT NOT NULL, name char(40) NOT NULL, resistance INT, INDEX index1(id,name), UNIQUE INDEX index2(name))
  第一个索引,名为index1,由id和name两个字段组成。第二个索引只包含name,并指明name字段的值必须是唯一的。
2.插入数据,可以通过其他某 ......

GDB 使用——Linux C编程

简述
    一 列文件清单
    二:执行程序
    三:显示数据
    四:断点(breakpoint)
    五.断点的管理
    六.变量的检查和赋值
    七. 单步执行
    八.函数的调用
 &nb ......

从C到JAVA,开始我的IT菜鸟之路!

真正发现人生需要知识的时候,我的青春已经浪费了一半。
于是鼓起勇气来到北大青鸟学习IT,鉴于多方考虑,还是选择了软件测试。
如今课业的一大半也已结束,从刚开始的一无所知,渐渐成长为一个菜鸟……
在课程的学习过程中,才渐渐发现自己对于这个行业的兴趣,尤其是软件开发这一块。
甚至对自己选择做测 ......

mysql常用SQL语句

一、表的导入导出语句及时间字符串部分处理函数
导出数据库所有表的结构               mysqldump -uroot -proot db_name -d > d:/export_db.sql(结尾不用分号)
导出数据库某个表的结构               mysqldump -uroot -proot db_n ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号