java web项目长时间没有请求与mysql的连接断开,服务器报500错误
2018-01-03 10:26
519 查看
这段时间发现自己之做的一个微信端项目出现了一个bug,就是偶尔进入微信页面时会报500错误,说jdbc 连接异常,不能够进行事务操作。。。
而刷新一下就好了,,,于是猜想是因为项目长时间没有http请求,与数据库的连接被断开了,,然后刷新一下就又连接上了。。
经查询资料得知,mysql有一个连接超时时间的概念。。。查询此项目的数据库的连接超时时间为28800秒,即为8小时。。
mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set
于是不难得知,肯定是由于项目长时间没有请求数据库,数据库过了8小时和这个连接超时时间之后,就会断开连接。。
而我们的项目使用的是c3p0的连接池,,过了8小时后,连接池中的连接已经被mysql断开了,即连接失效。。但是c3p0认为此连接却依然有效,此时当我们发请求请求数据库中的数据时,由于连接失效,并不能去连接数据库操纵数据,所以服务器会抛出一个500的错误。。
问题的原因已经找到,那我们该怎么解决呢??
其实解决起来很简单的。。
先说第一种办法吧,就是将数据库的连接超时时间设置大一点,
而刷新一下就好了,,,于是猜想是因为项目长时间没有http请求,与数据库的连接被断开了,,然后刷新一下就又连接上了。。
经查询资料得知,mysql有一个连接超时时间的概念。。。查询此项目的数据库的连接超时时间为28800秒,即为8小时。。
mysql> show global variables like 'wait_timeout';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| wait_timeout | 28800 |
+---------------+-------+
1 row in set
于是不难得知,肯定是由于项目长时间没有请求数据库,数据库过了8小时和这个连接超时时间之后,就会断开连接。。
而我们的项目使用的是c3p0的连接池,,过了8小时后,连接池中的连接已经被mysql断开了,即连接失效。。但是c3p0认为此连接却依然有效,此时当我们发请求请求数据库中的数据时,由于连接失效,并不能去连接数据库操纵数据,所以服务器会抛出一个500的错误。。
问题的原因已经找到,那我们该怎么解决呢??
其实解决起来很简单的。。
先说第一种办法吧,就是将数据库的连接超时时间设置大一点,
msyql> set global wait_timeout=1814400; msyql> set global interactive_timeout=1814400;
当然这种办法我并不推荐,,这个办法不太好,弊端太多了。。比如占用数据库资源,关键是这种办法并不能彻底根治mysql连接断开这种情况
所以我推荐第二种办法,,设置c3p0隔多少时间自动检测与数据库的连接,如果断开则自动重连
<bean id="pooledDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property> <property name="driverClass" value="${jdbc.driverClass}"></property> <property name="user" value="${jdbc.user}"></property> <property name="password" value="${jdbc.password}"></property> //下面两个属性就是设置c3p0隔28800秒自动检测与数据库的连接(28800也是mysql的默认的连接超时时间) <property name="testConnectionOnCheckin" value="true"></property> <property name="idleConnectionTestPeriod" value="28800"></property> </bean>
相关文章推荐
- 启动、停止、连接、断开MySQL服务器
- SSH项目中MySQL8小时自动断开连接配置文件解决方案
- MySQL5.6数据库8小时内无请求自动断开连接
- SSM项目连接远程Linux服务器的mysql 启动tomcat卡在了 Initializing Spring root WebApplicationContext
- 4、MySQL 8.0参考手册 连接到服务器并断开连接
- MySQL入门教程1 —— 连接与断开服务器
- 4、MySQL 8.0参考手册 连接到服务器并断开连接3.3.1创建和选择数据库
- codesmith连接Mysql提示“找不到请求的 .Net Framework Data Provider。可能没有安装。"
- 多个地市连接MQ,如果较长时间没有消息发送,ActiveMQ的消费端会自动断开连接(topic端)
- 连接PHPmyadmin是出现#2003 – 服务器没有响应 MySQL 无法启动的解决办法
- 4、MySQL 8.0参考手册 连接到服务器并断开连接3.3.2创建表格
- codesmith连接Mysql提示“找不到请求的 .Net Framework Data Provider。可能没有安装。"
- 连接MYSQL的时候报错(找不到请求的.net framework data provider。可能没有安装
- mysql超时设置的问题,如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat
- SSM项目连接远程Linux服务器的mysql 启动tomcat卡在了 Initializing Spring root WebApplicationContext
- 阿里云服务器linux环境,从启动tomcat服务器外网访问--->绑定域名--->Navicat远程连接mysql--->阿里云服务器部署项目过程中,一定会遇到的五大问题;
- 阿里云服务器CentOS7配置Java Web项目运行环境(MySql,Tomcat,Jre)
- 2、MySQL 8.0参考手册 连接到服务器并断开连接
- 远程连接Ubuntu服务器的mysql出现没有权限错误的解决办法
- 4、MySQL 8.0参考手册 连接到服务器并断开连接3.3.3将数据加载到表中