转载原文地址:原文地址

在说这个错误之前先说明我的项目是通过Hibernate来进行数据库操作的

关于MySQL连接超时问题,估计很多人都遇到过:大致情形都是这样,开发测试时程序都是正常的,一到第二天就出先莫名错误,比如在我的项目中就是定时任务执行,每天凌晨一点执行一次,也就是24小时每隔24小时执行,远远超出了8小时

如果你刚好在数据库超时的第一时间内看到日志记录的话那么,第一次超时发生的错误就是这样的:
ERROR [org.hibernate.util.JDBCExceptionReporter] - Communications link failure

Last packet sent to the server was 0 ms ago.

如果不是第一次超时后执行,以后每次报错就变成嵌套的错误了,就是下面这样:

ERROR [org.hibernate.util.JDBCExceptionReporter] -
 No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error:

** BEGIN NESTED EXCEPTION **

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException

MESSAGE: The last packet successfully received from the server was86395 milliseconds ago.The last packet sent successfully to the server was 86395 milliseconds ago, which  is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
STACKTRACE:

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: The last packet successfully received from the server was86395 milliseconds ago.The last packet sent successfully to the server was 86395 milliseconds ago, which  is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
 at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
 at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
 at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
 at java.lang.reflect.Constructor.newInstance(Unknown Source)
 at com.mysql.jdbc.Util.handleNewInstance(Util.java:406)
 at com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1074)
 at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3270)
 at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1932)
 at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2101)
 at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2554)
 at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1761)
 at com.mysql.jdbc.PreparedStatement.executeQuery(PreparedStatement.java:1912)
 at org.hibernate.jdbc.AbstractBatcher.getResultSet(AbstractBatcher.java:208)
 at org.hibernate.loader.Loader.getResultSet(Loader.java:1812)
 at org.hibernate.loader.Loader.doQuery(Loader.java:697)
 at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259)
 at org.hibernate.loader.Loader.doList(Loader.java:2232)
 at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2129)
 at org.hibernate.loader.Loader.list(Loader.java:2124)
 at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:401)
 at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:363)
 at org.hibernate.engine.query.HQLQueryPlan.performList(HQLQueryPlan.java:196)
 at org.hibernate.impl.SessionImpl.list(SessionImpl.java:1149)
 at org.hibernate.impl.QueryImpl.list(QueryImpl.java:102)
 at org.hibernate.impl.AbstractQueryImpl.uniqueResult(AbstractQueryImpl.java:835)
 at com.cn.util.db.TargetRecordDaoImpl.findbyIdAndDate(TargetRecordDaoImpl.java:23)
 at com.cn.util.parser.ExcelOperate.readExcel(ExcelOperate.java:324)
 at com.cn.util.parser.ExcelParser.parser(ExcelParser.java:41)
 at com.cn.util.timer.CRMExcelParserTarger.execute(CRMExcelParserTarger.java:76)
 at org.quartz.core.JobRunShell.run(JobRunShell.java:199)
 at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:549)
Caused by: java.net.SocketException: Software caused connection abort: socket write error
 at java.net.SocketOutputStream.socketWrite0(Native Method)
 at java.net.SocketOutputStream.socketWrite(Unknown Source)
 at java.net.SocketOutputStream.write(Unknown Source)
 at java.io.BufferedOutputStream.flushBuffer(Unknown Source)
 at java.io.BufferedOutputStream.flush(Unknown Source)
 at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:3251)
 ... 24 more

** END NESTED EXCEPTION **

具体解释是这样的:Mysql服务器默认的“wait_timeout”是8小时【也就是默认的值默认是28800秒】,也就是说一个connection空闲超过8个小时,Mysql将自动断开该connection,通俗的讲就是一个连接在8小时内没有活动,就会自动断开该连接。
wait timeout的值可以设定,但最多只能是2147483,不能再大了。也就是约24.85天
所以即使你MySQL通过my.ini 在
# The TCP/IP Port the MySQL Server will listen on
port=3306下面添加
# this is myown dinifition for mysql connection timeout
wait_timeout=31536000
interactive_timeout=31536000
无论超过最大限度多大的数值,只能被MySQL解析为2147483,2147483天后你的程序该出什么错还是什么错,避免不了的
后来发现Hibernate的内置连接池性能是非常的差,还不如直接用第三方的c3p0,改用C3P0连接池,这

个连接池会自动 处理数据库连接被关闭的情况。要使用C3P0很简单,先从Hibernate里把c3p0-0.9.1.jar复

制到项目的lib目录中,再在 hibernate.properties里去掉hibernate.c3p0开头的那些属性的注释(使用缺

省值或自己需要的数值),这样 Hibernate就会自动使用C3P0代替内置的连接池了。到目前为止前面的问题

没有再出现过。 
具体在hibernate.cfg.xml中配置如下

<property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>  <!--连接池的最小连接数-->   <property name="hibernate.c3p0.min_size">5</property>  <!--最大连接数-->   <property name="hibernate.c3p0.max_size">30</property>  <!--连接超时时间-->  <property name="hibernate.c3p0.timeout">1800</property>  <!--statemnets缓存大小-->   <property name="hibernate.c3p0.max_statements">100</property>  <!--每隔多少秒检测连接是否可正常使用  -->   <property name="hibernate.c3p0.idle_test_period">121</property>  <!--当池中的连接耗尽的时候,一次性增加的连接数量,默认为3-->   <property name="hibernate.c3p0.acquire_increment">1</property>  <property name="hibernate.c3p0.validate">true</property></span>  

mysql No operations allowed after connection closed.Connection was implicitly closed due to underly相关推荐

  1. com.mysql.cj.exceptions.ConnectionIsClosedException: No operations allowed after connection closed.

    目录 一.功能背景 二.错误信息 三.相关代码 四.问题原因 四.解决办法 1.修改dbDriver 2.修改数据库配置 3.通过修改配置文件信息 一.功能背景 在SpringBoot项目中使用第三方 ...

  2. (No operations allowed after connection closed.).Possibly consider using a shorter maxLifetime value

    这两天碰到一个问题,在正常查询数据时,没有问题,但在使用多线程查询数据导出时,会报以下错误: 2020-05-21 08:40:36.639 WARN [charger-business,,,] 13 ...

  3. 今天项目报错: No operations allowed after connection closed

    今天项目报错: No operations allowed after connection closed 错误原因:MySQL服务器默认的"wait_timeout"是28800 ...

  4. ConnectionIsClosedException: No operations allowed after connection closed

    最近生产上spring boot项目使用Hikari 数据源在一个用户信息查询操作数据库时总是报如题的错误.网上查看很多资料一直没有解决,但目前也没有什么好的办法,哪位大神给指导下. 报错信息如下: ...

  5. 数据源 No operations allowed after connection closed

    Spring提供了两个这样的数据源(都位于org.springframework.jdbc.datasource程序包里): DriverManagerDataSource:在每个连接请求时都新建一个 ...

  6. No operations allowed after connection closed--转

    https://www.jianshu.com/p/1626d41572f2 Spring boot的单数据源配置比较简单,只需要在application.properties配置相关的jdbc连接的 ...

  7. mysql报错No operations allowed after statement closed

    mysql报错No operations allowed after statement closed 网上搜了很多,感觉都没什么作用,很多都是改等待时间,其实还有一个原因,可能是数据库锁住了,这种报 ...

  8. myBatis连接MySQL报错误:No operations allowed after conn

    为什么80%的码农都做不了架构师?>>>    myBatis连接MySQL报错误:No operations allowed after connection closed.Con ...

  9. No operations allowed after statement closed

    昨晚kettle跑数据pao出了错 本人链接的是mysql数据库 发现这个 org.pentaho.di.core.exception.KettleDatabaseException: Unable ...

最新文章

  1. MFC调用批处理文件(.bat)
  2. win7网络连接优先级设置
  3. 澳大利亚 计算机 博士,澳大利亚迪肯大学招收计算机博士
  4. (转)linux上nginx源码编译安装
  5. Arturia Prophet Mac音频插件:将Prophet 5,Prophet VS,Prophet Hybrid三种不同音乐合成器于一体
  6. html调用xfplugin,使用多设备执行脚本的时候,html report功能无法正常使用
  7. quartz 每30秒执行一次_Net Core 使用 Quartz
  8. 灰度资产管理总规模突破420亿美元
  9. linux哪个文件夹不能乱改,Linux的文件夹权限如何更改
  10. 时间java_Java 日期时间
  11. python 获取各pkg版本_Python pkg_resources.get_distribution方法代碼示例
  12. Android 去掉Power键屏保功能,但保留长按关机功能。
  13. 安卓8.1系统SDK去掉系统设置中的自动调节亮度
  14. 关于电脑自带学生office365免费版和Visio不兼容问题
  15. PC端QQ用某个账号登陆未响应情况解决
  16. python---爬虫
  17. 计算机图形学笔记 || 基本图形的扫描转换
  18. yolov7 打开深度摄像头 realsences
  19. 站内通知 java组件,spring-aop组件详解——Advice通知
  20. html实现鼠div的旋转,鼠标悬浮到div上,div进行360°旋转

热门文章

  1. html 图片禁止拖动
  2. c语言西格马求和编程,(完整word版)求和符号西格马
  3. 如何对台式计算机 笔记本进行日常维护,笔记本电脑日常维护十项准则[详细介绍]...
  4. 易语言调用API控制组合框高度宽度居中下拉方向
  5. Windows使用VSPD虚拟串口
  6. 基于STM32单片机的智能家居烟雾温度火灾防盗报警的设计与实现
  7. “神奇”的美林时钟,告诉你如何调整资产配置
  8. 【链表】11 求序列的交集(链表)
  9. 【C语言->数据结构与算法】->哈夫曼压缩解压缩->第一阶段->哈夫曼编码解码的实现
  10. 调研发现:外企最关注员工心理健康,私企对财务健康投资最大,国企更关注员工职业和社会健康 | 美通社头条...