解决数据库连接池连接mysql时,每隔8小时mysql自动断开连接的问题
Mysql 自动断开连接的问题及解决办法

Mysql 自动断开连接的问题及解决办法曾经在公司的时候,同事做项目(tomcat + struts+ mysql)时遇到了这样一个问题。
第一次登录的时候,系统正常运行,机器没有关闭,第二天再次登陆的时候,系统就出现了问题。
后来查出来是数据库连接池的连接断开的缘故。
重起tomcat 又恢复正常了。
原因是Mysql的把长时间没有活跃的连接给断开了。
默认的时间是28800s ,折8小时。
也不知道当时他有没有仔细上网搜索,反正,他问我,我也因为时间忙没有仔细探究。
后来他就索性放弃数据库连接池,直接用JDBC 代替了。
这几天,自己做的项目又遇到了这个问题,不得不设法解决这个问题。
终于有了解决办法,而且仍然可以使用数据库连接池。
核心思想就是改变数据库连接池的实现方式。
原先用的是struts自带的数据库连接池(struts-legacy.jar),改用apache 的dbcp连接池。
步骤如下:1,修改数据库连接池,使用apache的 DBCP代替从apache官方网站新增两个包 commons-pool-1.3.jar 和commons-dbcp-1.2.2.jar放到相应的lib下面。
如果已经有了,不需下载。
2,修改Struts-config.xml配置。
修改如下:<data-sources><data-sourcekey="org.apache.struts.action.DATA_SOURCE"type="mons.dbcp.BasicDat aSource"><set-property property="driverClassName"value="com.mysql.jdbc.Driver" /><set-property property="description"value="wjjg" /><set-property property="url"value="jdbc:mysql://localhost/wjjg?useUnicode=true&characterEncod ing=GB2312" /><set-property property="password" value="12345678" /><set-property property="username" value="wjjg" /><set-property property="maxActive" value="10" /> <set-property property="maxIdle" value="60000" /><set-property property="maxWait" value="60000" /><set-property property="defaultAutoCommit" value="true" /><set-property property="defaultReadOnly" value="false" /><set-property property="testOnBorrow" value="true"/><set-property property="validationQuery" value="select 1"/></data-source>其中testOnBorrow 和validationQuery 很重要。
MySQL连接中断和重连的处理方法

MySQL连接中断和重连的处理方法在进行数据库操作时,我们经常会遇到MySQL连接中断的情况。
当连接中断后,我们需要考虑如何快速恢复连接,以确保数据的完整性和一致性。
本文将介绍MySQL连接中断的原因及常见的处理方法,以帮助读者更好地应对这一问题。
一、连接中断的原因1. 网络故障:网络中断或网络信号不稳定是导致MySQL连接中断的最常见原因之一。
例如,当客户端和服务器之间的网络连接断开时,连接将被中断。
2. 服务器故障:服务器端可能会出现故障,例如服务器崩溃、内存不足或负载过高等,这些故障都可能导致连接中断。
3. 长时间无请求:当客户端在一段时间内没有向服务器发送请求时,MySQL 会自动断开连接。
这是为了避免占用过多的资源。
4. 防火墙限制:防火墙可能会阻止MySQL的连接请求,导致连接中断。
这通常发生在服务器部署在公司内部网络中,而客户端尝试从外部网络连接时。
二、处理方法1. 检查网络连接:当连接中断时,第一步是检查网络连接。
我们可以使用ping 命令检查客户端和服务器之间的网络连接是否正常。
如果发现网络故障,可以尝试重新连接网络或联系网络管理员解决问题。
2. 使用长连接:在MySQL中,可以使用长连接(persistent connection)来解决连接断开的问题。
长连接是指客户端与服务器之间保持连接的一个连接模式,连接在使用后不会主动断开,而是保持长时间的连接状态。
这样可以减少连接的建立和断开次数,提高应用的性能和稳定性。
在PHP中,可以使用mysqli或PDO等扩展来实现长连接。
3. 设置超时时间:MySQL客户端和服务器之间的连接通常有一个超时时间。
当连接超过该时间后,MySQL服务器会主动断开连接。
我们可以通过设置连接超时时间的方式来应对连接中断的问题。
可以通过修改MySQL配置文件中的"wait_timeout"参数来设置连接超时时间。
同时,也可以在连接MySQL时,通过设置相应的连接选项来指定超时时间。
mysql默认8小时连接断开机制解决

mysql默认8⼩时连接断开机制解决转载连接:/database/1639209.html本⽂提供了对c3p0与DBCP连接池连接MySql数据库时, 8⼩时内⽆请求⾃动断开连接的解决⽅案。
⾸先介绍⼀下我在项⽬(c3p0连接池)中遇到的问题,后⾯还提供了使⽤DBCP连接池的解决⽅案。
原因分析:MySQL服务器默认的“wait_timeout”是28800秒即8⼩时,意味着如果⼀个连接的空闲时间超过8个⼩时,MySQL将⾃动断开该连接,⽽连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应⽤申请使⽤该连接时,就会导致上⾯的报错。
解决⽅案(解决这个问题的办法有三种,推荐第⼆种):1. 增加 MySQL 的 wait_timeout 属性的值修改mysql安装⽬录下的配置⽂件 my.ini⽂件(如果没有此⽂件,复制“my-default.ini”⽂件,⽣成“复件 my-default.ini”⽂件。
将“复件 my-default.ini”⽂件重命名成“my.ini” ),在⽂件中设置:wait_timeout=31536000interactive_timeout=31536000这两个参数的默认值是8⼩时(60*60*8=28800)。
注意: 1.wait_timeout的最⼤值只允许2147483 (24天左右)2.修改配置⽂件为⽹上⼤部分⽂章所提供的⽅式,也可以使⽤mysql命令对这两个属性进⾏修改2. 减少连接池内连接的⽣存周期减少连接池内连接的⽣存周期,使之⼩于上⼀项中所设置的wait_timeout 的值。
修改 c3p0 的配置⽂件,在 Spring 的配置⽂件中设置:<bean id="dataSource" class="boPooledDataSource"><property name="maxIdleTime"value="1800"/><!--other properties --></bean>3. 定期使⽤连接池内的连接定期使⽤连接池内的连接,使得它们不会因为闲置超时⽽被 MySQL 断开。
MySQL数据库连接断开与重连处理方法

MySQL数据库连接断开与重连处理方法MySQL是一种常用的关系型数据库管理系统,广泛应用于各种网站和应用程序中。
然而,由于网络不稳定性或其他原因,数据库连接有时会断开,这会给程序的正常运行带来困扰。
本文将分享一些处理MySQL数据库连接断开和重连的方法,帮助程序员更好地应对这个问题。
一、了解MySQL连接状态在处理MySQL连接断开和重连之前,首先需要了解MySQL连接状态。
当一个连接建立后,MySQL服务器会为该连接分配一个唯一的标识符(称为连接ID),并保持与客户端的通信。
但是,由于网络原因或服务器的配置,连接可能会断开。
当连接断开时,客户端会收到一个“MySQL服务器断开连接”的错误信息。
二、处理连接断开的方法1. 设置MySQL连接超时时间MySQL服务器默认的连接超时时间为28800秒(8小时),即如果一个连接在8小时内没有任何活动,服务器会自动断开该连接。
这个时间对于大多数应用程序来说是足够长的,但是对于一些特殊应用场景来说可能不够。
可以通过修改MySQL服务器的配置文件,将连接超时时间调整为更合适的值。
需要注意的是,将超时时间设置得过短可能导致频繁的连接重连,增加服务器的负担。
2. 使用心跳机制心跳机制是一种常用的处理连接断开的方法。
它的原理是在建立连接后,定期向MySQL服务器发送一个空的查询,以保持连接的活跃状态。
如果服务器在一段时间内没有收到任何查询请求,就会主动断开连接。
通过设置适当的心跳间隔,可以有效地防止连接断开。
3. 检测连接状态在程序中,可以通过调用MySQL提供的API函数来检测连接的状态。
如果连接断开,可以通过重新建立连接来恢复。
一种常用的检测方法是使用`ping()`函数,该函数会向服务器发送一个简单的查询,如果连接断开,会返回一个错误信息。
在捕获到连接断开的错误后,可以进行相应的处理,如重新连接或重启程序。
4. 使用连接池连接池是一种常见的处理连接断开和重连的方法。
MySQL8小时连接超时断开问题

使用Connector/J连接MySQL数据库,程序运行较长时间后就会报以下错误:
Communications link failure,The last packet successfully received from the server was *** millisecond ago.The last packet successfully sent to the server was *** millisecond ago。
其中错误还会提示你修改wait_timeout或是使用Connector/J的autoReconnect属性避免该错误。
后来查了一些资料,才发现遇到这个问题的人还真不少,大部分都是使用连接池方式时才会出现这个问题,短连接应该很难出现这个问题。
这个问题的原因:
MySQL服务器默认的“wait_timeout”是28800秒即8小时,意味着如果一个连接的空闲时间超过8个小时,MySQL将自动断开该连接,而连接池却认为该连接还是有效的(因为并未校验连接的有效性),当应用申请使用该连接时,就会导致上面的报错。
1.按照错误的提示,可以在JDBC URL中使用autoReconnect属性,实际测试时使用了
autoReconnect=true&failOverReadOnly=false,不过并未起作用,使用的是5.1版本,可能真像网上所说的只对4之前的版本有效。
2.没办法,只能修改MySQL的参数了,wait_timeout最大为31536000即1年,在f中加入:
[mysqld]
wait_timeout=31536000
interactive_timeout=31536000
重启生效,需要同时修改这两个参数。
mysql八小时问题

mysql⼋⼩时问题 最近买了阿⾥云,把项⽬部署上去以后,每天第⼀次访问总是出⼀次异常,然后刷新⼀下就正常了。
经查询资料发现,原来mysql默认会⾃动关闭空闲时间超过8⼩时的连接,⽽连接池并不知道这个连接已经关闭了,所以就会出异常。
查看mysqlSHOW GLOBAL VARIABLES LIKE'wait_timeout'; 修改wait_timeout,虽然通过修改mysql的wait_timeout值可以解决问题,但实际情况中这样修改会影响到所有的项⽬,并不推荐这样做SET GLOBAL wait_timeout=60; 我⽤的是dpcp连接池,配置⽂件⾥加⼊以下内容,意思是每隔timeBetweenEvictionRunsMillis毫秒检测⼀次空闲时间超过minEvictableIdleTimeMillis毫秒的连接,检测到就重连⼀次。
根据这个原理,可以计算出只要这两个参数加起来⼩于wait_timeout即可,例如下⾯每隔两⼩时检测空闲超过五⼩时的连接,则空闲连接最多也会在第七个⼩时的时候被检测到并重连,⽽mysql默认是⼋⼩时,这样就解决了问题。
注意这两个参数的单位都是毫秒,⽽mysql中wait_timeout的单位是秒。
<!-- 8⼩时问题,每隔两⼩时检测空闲超过五⼩时的连接 --><property name="timeBetweenEvictionRunsMillis" value="7200000"/><property name="minEvictableIdleTimeMillis" value="18000000"/> 原创⽂章,转载请注明出处。
如何解决mysql数据库8小时无连接自动关闭

SELECT CURRENT_USER
专家建议关于mysql自动关闭服务的三个方法,用户最好采取第一个办法最为彻底解决。
方法二:修改如下JDBC连接的 URL:
jdbc:mysql://hostaddress:3306/schemaname?autoReconnect=true
添加 autoReconnect=true 这个参数,即能解决这个问题。
方法三:配置文件(proxool.xml):
方法一:这个参数的名称是 wait_timeout,其默认值为 28800秒(8小时)。其意义为关闭一个连接之前在这个连接上等到行动的秒数,也就是说,如果一个连接闲置超过这个选项所设置的秒数,MySQL 会主动断开这个连接。
修改操作:
linux下打开/etc/f,在属性组mysqld下面添加参数如下:
mysql
jdbc:mysql://localhost/yourDatebase?useUnicode=true&characterEncoding=UTF-8
com.mysql.jdbc.Driver
90000
20
3
20
3
true
true
[mysqld]
interactive_timeout=28800000
wait_timeout=28800000
windows下打开my.ini,增加:
[mysqld]
interactive_timeout=28800000
wait_timeout=28800000
有实践表明,没有办法把这个值设置成无限大,即永久。因此如果你无法保证你的应用程序必定在设定的秒数内至少有一次操作,那么最好现象,可以通过mysql服务器端程序mysql Administrator调整连接参数。将max_connections max_updates max_questions三项数据调整到很大的数字,那么你有限的操作将不会导致数据库服务的终止了在MySQL数据库中,如果一个连接8小时没有请求和操作,就会自动断开,从而导致一些基于数据库连接的应用程序,特别是 WEB 应用程序出错。解决mysql数据库自动关闭服务三个方法:
MySQL+Hibernate下连接空闲8小时自动断开问题解决方案

MySQL+Hibernate下连接空闲8小时自动断开问题解决方案前段时间刚完成一个家教网项目,数据库为MySQL5.0,持久层使用Hibernate 3.1,没有使用额外的连接池,那么Hibernate会默认使用它自带的一个默认连接池,也就是DriverManagerConnectionProvider。
先在本机上调试都毫无问题,于是部署到服务器上,也都没什么问题。
由于这是新网站,根本还没正式对外发布和宣传,所以头两天根本没人访问。
等到第二天,我再次访问网站时,问题就出现了,错误信息如下:javax.servlet.ServletException: org.hibernate.exception.JDBCConnectionException: could not execute queryorg.apache.struts.action.RequestProcessor.processException(RequestProcessor.java:535)org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:433) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)javax.servlet.http.HttpServlet.service(HttpServlet.java:690)javax.servlet.http.HttpServlet.service(HttpServlet.java:803)org.apache.jsp.index_jsp._jspService(index_jsp.java:57)org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)javax.servlet.http.HttpServlet.service(HttpServlet.java:803)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)javax.servlet.http.HttpServlet.service(HttpServlet.java:803)b1000.jcom.system.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:30)org.hibernate.exception.JDBCConnectionException: could not execute queryorg.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:74)org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)org.hibernate.loader.Loader.doList(Loader.java:2148)org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)org.hibernate.loader.Loader.list(Loader.java:2024)org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)org.hibernate.impl.SessionImpl.list(SessionImpl.java:1533)org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)b1000.jcom.dao.ArticleDAO.getArticlesUnder(ArticleDAO.java:163)b1000.jcom.struts.action.HomeAction.execute(HomeAction.java:40)org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)javax.servlet.http.HttpServlet.service(HttpServlet.java:690)javax.servlet.http.HttpServlet.service(HttpServlet.java:803)org.apache.jsp.index_jsp._jspService(index_jsp.java:57)org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)javax.servlet.http.HttpServlet.service(HttpServlet.java:803)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)javax.servlet.http.HttpServlet.service(HttpServlet.java:803)b1000.jcom.system.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:30)com.mysql.jdbc.exceptions.MySQLNonTransientConnectionException: No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:** BEGIN NESTED EXCEPTION **municationsExceptionMESSAGE: Communications link failure due to underlying exception:** BEGIN NESTED EXCEPTION **java.io.EOFExceptionSTACKTRACE:java.io.EOFExceptionat com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963)at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2375)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2874)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1268)at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1403)at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)at org.hibernate.loader.Loader.doQuery(Loader.java:662)at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)at org.hibernate.loader.Loader.doList(Loader.java:2145)at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)at org.hibernate.loader.Loader.list(Loader.java:2024)at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1533)at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)at b1000.jcom.dao.ArticleDAO.getArticlesUnder(ArticleDAO.java:163)at b1000.jcom.struts.action.HomeAction.execute(HomeAction.java:40)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)atorg.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)at org.apache.jsp.index_jsp._jspService(index_jsp.java:57)at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at b1000.jcom.system.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:30) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperV alve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)at mon.HandlerRequest.invoke(HandlerRequest.java:283)at mon.ChannelSocket.invoke(ChannelSocket.java:767)at mon.ChannelSocket.processConnection(ChannelSocket.java:697)at mon.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)at ng.Thread.run(Unknown Source)** END NESTED EXCEPTION **Last packet sent to the server was 15 ms ago.STACKTRACE:municationsException: Communications link failure due to underlying exception:** BEGIN NESTED EXCEPTION **java.io.EOFExceptionSTACKTRACE:java.io.EOFExceptionat com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:1963)at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2375)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2874)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1268)at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1403)at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)at org.hibernate.loader.Loader.doQuery(Loader.java:662)at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)at org.hibernate.loader.Loader.doList(Loader.java:2145)at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)at org.hibernate.loader.Loader.list(Loader.java:2024)at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1533)at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)at b1000.jcom.dao.ArticleDAO.getArticlesUnder(ArticleDAO.java:163)at b1000.jcom.struts.action.HomeAction.execute(HomeAction.java:40)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)atorg.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)at org.apache.jsp.index_jsp._jspService(index_jsp.java:57)at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at b1000.jcom.system.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:30) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperV alve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)at mon.HandlerRequest.invoke(HandlerRequest.java:283)at mon.ChannelSocket.invoke(ChannelSocket.java:767)at mon.ChannelSocket.processConnection(ChannelSocket.java:697)at mon.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)at ng.Thread.run(Unknown Source)** END NESTED EXCEPTION **Last packet sent to the server was 15 ms ago.at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:2586)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2874)at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1623)at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1715)at com.mysql.jdbc.Connection.execSQL(Connection.java:3249)at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1268)at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1403)at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:139)at org.hibernate.loader.Loader.getResultSet(Loader.java:1669)at org.hibernate.loader.Loader.doQuery(Loader.java:662)at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)at org.hibernate.loader.Loader.doList(Loader.java:2145)at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)at org.hibernate.loader.Loader.list(Loader.java:2024)at org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1533)at org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)at b1000.jcom.dao.ArticleDAO.getArticlesUnder(ArticleDAO.java:163)at b1000.jcom.struts.action.HomeAction.execute(HomeAction.java:40)at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)atorg.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)at org.apache.jsp.index_jsp._jspService(index_jsp.java:57)at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at b1000.jcom.system.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:30) atorg.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)at org.apache.catalina.core.StandardWrapperV alve.invoke(StandardWrapperValve.java:233)at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)at mon.HandlerRequest.invoke(HandlerRequest.java:283)at mon.ChannelSocket.invoke(ChannelSocket.java:767)at mon.ChannelSocket.processConnection(ChannelSocket.java:697)at mon.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:889)at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)at ng.Thread.run(Unknown Source)** END NESTED EXCEPTION **com.mysql.jdbc.SQLError.createSQLException(SQLError.java:888)com.mysql.jdbc.Connection.checkClosed(Connection.java:1931)com.mysql.jdbc.Connection.prepareStatement(Connection.java:4705)com.mysql.jdbc.Connection.prepareStatement(Connection.java:4671)org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:442)org.hibernate.jdbc.AbstractBatcher.getPreparedStatement(AbstractBatcher.java:368)org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:105)org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1561)org.hibernate.loader.Loader.doQuery(Loader.java:661)org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:224)org.hibernate.loader.Loader.doList(Loader.java:2145)org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2029)org.hibernate.loader.Loader.list(Loader.java:2024)org.hibernate.loader.criteria.CriteriaLoader.list(CriteriaLoader.java:94)org.hibernate.impl.SessionImpl.list(SessionImpl.java:1533)org.hibernate.impl.CriteriaImpl.list(CriteriaImpl.java:283)b1000.jcom.dao.ArticleDAO.getArticlesUnder(ArticleDAO.java:163)b1000.jcom.struts.action.HomeAction.execute(HomeAction.java:40)org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431) org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)javax.servlet.http.HttpServlet.service(HttpServlet.java:690)javax.servlet.http.HttpServlet.service(HttpServlet.java:803)org.apache.jsp.index_jsp._jspService(index_jsp.java:57)org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)javax.servlet.http.HttpServlet.service(HttpServlet.java:803)org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:337)org.apache.jasper.servlet.JspServlet.service(JspServlet.java:266)javax.servlet.http.HttpServlet.service(HttpServlet.java:803)b1000.jcom.system.filter.RequestEncodingFilter.doFilter(RequestEncodingFilter.java:30) 当时也搞不清楚为什么,但重启Tomcat后就一切回复正常了,但是又过了一天,问题再次出现。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
解决数据库连接池连接mysql 时,8小时mysql 自动断开连接的问题文章分类:数据库解决数据库连接池连接mysql 时,8小时mysql 自动断开所有连接的问题最近有个问题非常讨厌,我们的工程中使用自己的连接池连接mysql 数据库,可mysql 数据库8小时就会自动断开所有链接,连接池就失效,需要重新启动tomcat 才有效,呵呵,服务器可不能老是用“人工智能”来干预啊,后来翻了一下mysql 的手册,发现mysql 有解决办法,下面就是最简单的解决办法:连接数据库的时候加上autoReconnect=true 这个参数:
jdbc:mysql://localhost:3306/accounant?useUnicode=true& characterEncoding=UTF-8&au toReconnect=true 但是,在mysql 手册中有这样一段话:autoReconnect 驱动程序是否应尝试再次建立失效的和/或死连接?如果允许,对于在失效或死连接上发出的查询(属于当前事务),驱动程序将抛出异常,但在新事务的连接上发出下一个查询时,将尝试再连接。
不推荐使用该特性,这是因为,当应用程序不能恰当处理SQLExceptions 时,它会造成与会话状态和数据一致性有关的副作用,设计它的目的仅用于下述情况,即,当你无法配置应用程序来恰当处理因死连接和/或无效连接导致的SQLExceptions 时。
作为可选方式,可将MySQL 服务器变量“wait_timeout”设置为较高的值,而不
是默认的8 小时。
呵呵,不知道这种“副作用”会产生什么后果,难道会使tomcat 崩溃??会产生“数据一致性”问题??保险一点的办法还是增加“wait_timeout”这个值吧,把28800 设置成更大的值,这样应该就不会有什么问题了吧。
注:目前我使用的是autoReconnect 这种方式,未发现什么问题。