c3p0连接池连接MySql数据库时,无请求自动断开连接的解决方案
2015-08-29 20:57
691 查看
作为一个程序员要养成些笔记的习惯,记录自己遇到的一些问题,这样才能一步一步由菜鸟成长为大牛!今天主要讲述项目中使用c3p0连接池遇到的一些问题。
1.错误现象描述与错误日志
项目部署好后,我进行插入数据的操作,一切是正常的!后来出去了下,喝了杯茶,回来再测试,呵呵….想不到的是程序报错了…此时,心中一万只草泥马在奔腾,但是我们还是要冷静下来,先看看日志
日志的核心在于:
那么原因就很明显了!
2.原因查找与分析
此时我默默的打开自己的c3p0配置,发现就写了这几行
在进入自己的数据库,查看wait_timeout时间
结果如下:
此时结果不言而喻:我的MySQL服务器设置的“wait_timeout”是120,这意味着一个连接的空闲时间为2分钟,两分钟后MySQL将自动断开该连接,而我在c3p0中没有设置idleConnectionTestPeriod,没有设置idleConnectionTestPeriod默认为0,也就是说c3p0不检查连接的有效性,当应用申请使用该连接时,就会导致上面的报错。
3.解决方法
网上的解决方法很多,在这里我列举自己使用的两条。
(1)修改mysql的wait_timeout
修改mysql安装目录下的配置文件 my.ini文件,设置
备注:
默认的“wait_timeout”是28800秒即8小时;
2147483为最大允许值;
(2)修改c3p0的配置
设置c3p0中连接池内连接的生存周期(idleConnectionTestPeriod)小于数据库中的wait_timeout的值
如我的数据wait_timeout=120;c2p0的配置改为
网上貌似还有其他的解决方法,在这里建议使用第二种。因为公司线上的数据库都是DBA管着,你想改人家还不同意呢,还是自谋出路啊!
后记:至于c3p0的其他配置可以参考http://blog.csdn.net/caihaijiang/article/details/6843496
1.错误现象描述与错误日志
项目部署好后,我进行插入数据的操作,一切是正常的!后来出去了下,喝了杯茶,回来再测试,呵呵….想不到的是程序报错了…此时,心中一万只草泥马在奔腾,但是我们还是要冷静下来,先看看日志
日志的核心在于:
(1)com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure (2)The last packet successfully received from the server was 2,562,038 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago
那么原因就很明显了!
2.原因查找与分析
此时我默默的打开自己的c3p0配置,发现就写了这几行
c3p0.named-configs.test.jdbcUrl=jdbc:mysql://localhost:3306/test?zeroDateTimeBehavior=convertToNull c3p0.named-configs.test.password=root c3p0.named-configs.test.user=root c3p0.named-configs.test.maxPoolSize=30
在进入自己的数据库,查看wait_timeout时间
SHOW VARIABLES LIKE '%wait_timeout%'
结果如下:
此时结果不言而喻:我的MySQL服务器设置的“wait_timeout”是120,这意味着一个连接的空闲时间为2分钟,两分钟后MySQL将自动断开该连接,而我在c3p0中没有设置idleConnectionTestPeriod,没有设置idleConnectionTestPeriod默认为0,也就是说c3p0不检查连接的有效性,当应用申请使用该连接时,就会导致上面的报错。
3.解决方法
网上的解决方法很多,在这里我列举自己使用的两条。
(1)修改mysql的wait_timeout
修改mysql安装目录下的配置文件 my.ini文件,设置
wait_timeout=2147483
备注:
默认的“wait_timeout”是28800秒即8小时;
2147483为最大允许值;
(2)修改c3p0的配置
设置c3p0中连接池内连接的生存周期(idleConnectionTestPeriod)小于数据库中的wait_timeout的值
如我的数据wait_timeout=120;c2p0的配置改为
c3p0.named-configs.test.idleConnectionTestPeriod=60
网上貌似还有其他的解决方法,在这里建议使用第二种。因为公司线上的数据库都是DBA管着,你想改人家还不同意呢,还是自谋出路啊!
后记:至于c3p0的其他配置可以参考http://blog.csdn.net/caihaijiang/article/details/6843496
相关文章推荐
- 后IOE时代,Mysql 与 Postgre SQL的对比
- MySQL分页limit的使用方法
- MYSQL的添加字段和修改字段
- Mysql 总结
- mysql数据库密码修改
- MYSQL字段
- 彻底解决mysql数据乱码问题
- 修改MySQL最大连接数
- MySQL 性能优化详解
- mysql 之查询mysql 基本信息sql (smallnews笔记)
- mysql远程连接错误1130的解决方法
- [转载]mysql远程连接错误1130的解决方法
- Entity Framework连接Mysql数据库并生成Model和DAL层
- mysql命令行修改字符编码
- MySQL修改编码设置及乱码问题
- mysql登录报错“Access denied for user 'root'@'localhost' (using password: YES”的处理方法
- MySQL基本操作(二)
- mysql的查询、子查询及连接查询
- mysql字符集设置浅了解
- hive mysql 编码问题