写的是JSP应用。

只要8小时内没有访问数据库,应用再次通过jdbc访问数据库就会发生异常。本人用的是Mysql5.5不能通过在链接字符窜增加autoReconnect=true解决。只有Mysql 4.x才能通过这个办法解决。

private static String url = "jdbc:mysql://localhost:3306/remote?autoReconnect=true&useUnicode=true&characterEncoding=utf8";

然后我就想,能不能开一个线程,每隔8小时访问一次Mysql数据库。原理

下面开始试验。

我将Mysql5.5的 wati_timeout设置为10

set global wait_timeout=10

只要过10秒不访问访问应用,那么就会报错。还原了事故现场。

然后增加以下代码,增加一个线程,每隔10秒访问一次数据库,那么就不会报错,而且页面正常显示。下面的Listener使用的是Servlet 3.0的写法,低版本的请百度。

packageservlet;importjavax.servlet.ServletContextEvent;importjavax.servlet.ServletContextListener;importjavax.servlet.annotation.WebListener;importutils.MysqlTool;/*** 保持和MYSQL的链接,每8小时连接一次,Mysql wait_timeout为28800

*@author**/@WebListenerpublic class KeepMysqlListener implementsServletContextListener {privateMyThread myThread;publicKeepMysqlListener(){

}

@Overridepublic voidcontextDestroyed(ServletContextEvent arg0) {if (myThread != null &&myThread.isInterrupted()) {

myThread.interrupt(); //销毁线程

}

}

@Overridepublic voidcontextInitialized(ServletContextEvent arg0) {if (myThread == null) {

myThread= newMyThread();

myThread.start();//servlet 上下文初始化时启动线程

}

}

}class MyThread extendsThread {public voidrun() {while (!this.isInterrupted()) {//线程未中断执行循环

try{

MysqlTool.keepMysql();

Thread.sleep(10*1000); //每隔10m秒执行一次 测试成功后可以改成8小时的 8*60*60*1000ms

} catch(InterruptedException e) {

e.printStackTrace();

}

}

}

}

其中MysqlTool.keepMysql()方法如下:

packageutils;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.List;public classMysqlTool {//数据库连接对象

private static Connection conn = null;//驱动程序名

private static String driver = "com.mysql.jdbc.Driver";//URL指向要访问的数据库名mydata

private static String url = "jdbc:mysql://localhost:3306/remote?autoReconnect=true&useUnicode=true&characterEncoding=utf8";//MySQL配置时的用户名

private static String username = "root";//MySQL配置时的密码

private static String password = "";//获得连接对象

private static synchronizedConnection getConn(){if(conn == null){try{

Class.forName(driver);

conn=DriverManager.getConnection(url, username, password);

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(SQLException e) {

e.printStackTrace();

}

}returnconn;

}public staticString keepMysql(){

PreparedStatement pstmt= null;

String sql= "SELECT 1 FROM USERS";

ResultSet rs= null;

String str= "";try{

pstmt=getConn().prepareStatement(sql);

rs=pstmt.executeQuery();//System.out.println(pstmt.toString());

while(rs.next()) {

str= rs.getString(1);

}

rs.close();

pstmt.close();

}catch(SQLException e) {

e.printStackTrace();

}returnstr;

}

}

测试成功之后,将代码中的10*1000替换成 8*60*60*1000即可。

jdbc mysql wait_timeout_MySql wait_timeout问题解决办法。相关推荐

  1. MySql wait_timeout问题解决办法。

    MySql wait_timeout问题解决办法. 参考文章: (1)MySql wait_timeout问题解决办法. (2)https://www.cnblogs.com/CryOnMyShoul ...

  2. php 和mysql中文乱码问题,常见php与mysql中文乱码问题解决办法

    常见php与mysql中文乱码问题解决办法 乱码问题1:用PHPmyAdmin操作MySQL数据库汉字显示正常,但用PHP网页显示MySQL数据时所有汉字都变成了?号. 症状:用PHPmyAdmin输 ...

  3. linux mysql 存储过程乱码,mysql存储过程中 乱码问题解决办法

    中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题. 1.直接使用insert into语句没问题,能够正常插入汉字. 2.把insert into语句移到Procedu ...

  4. mysql连接timeout_mysql 连接超时wait_timeout问题解决

    1.问题现象: com.mysql.jdbc.CommunicationsException: The last packet successfully received from the serve ...

  5. mysql max字符串报错_mysql [Warning] max_join_size报错问题解决办法

    文章介绍了关于mysql [Warning] max_join_size报错问题解决办法,有需要的同学看看. 100716 06:32:45 d started 100716 6:32:45 [War ...

  6. mysql安装最后两项无响应,win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法...

    win10下安装mysql 1. 官网下载mysql 网址:https://www.mysql.com/downloads/ download页面往下拉:点击下图红框: 按下图指示操作: 下载之后解压 ...

  7. mysql 导出过长的数字列时变科学计数法问题解决办法

    mysql 导出过长的数字列时变科学计数法问题解决办法 参考文章: (1)mysql 导出过长的数字列时变科学计数法问题解决办法 (2)https://www.cnblogs.com/yangjinw ...

  8. mysql中CONCAT值为空的问题解决办法

    mysql中CONCAT值为空的问题解决办法 参考文章: (1)mysql中CONCAT值为空的问题解决办法 (2)https://www.cnblogs.com/fogwang/p/5536897. ...

  9. com.mysql.cj.jdbc.Driver连接失败解决办法

    com.mysql.cj.jdbc.Driver连接失败解决办法 com.mysql.cj.jdbc.Driver连接失败解决办法 (1)错误伊始 (2)怎么还是报错? (3)最终解决 com.mys ...

最新文章

  1. [蓝桥杯2016初赛]卡片换位 bfs+set
  2. RouterOS DNS劫持 -- A记录
  3. 正则表达式从基础到深入实战
  4. 基于遗传算法实现自动组卷
  5. 荣耀9igoogle模式_iGoogle个性化主页的6种替代方法
  6. Adobe Reader PDF 护眼设置
  7. 学习python:异常处理
  8. 动态包含与静态包含的区别
  9. unity3D跑酷游戏源码,支持安卓+IOS双端 unity2019 C#语言开发
  10. android应用市场 更新,当贝市场(com.dangbeimarket) - 4.2.9 - 应用 - 酷安
  11. 我的折腾日记-- Ubuntu 16.04
  12. 永葆年轻的小虫子 大众甲壳虫1.2T
  13. java zip加密压缩_Java解压和压缩带密码的zip文件过程详解
  14. layui引入php项目,Layui使用入门教程
  15. Qt中的C++技术 张波
  16. DockerHub上最受欢迎的151个官方镜像,相传掌握第17个可以主宰宇宙!
  17. MySQL数据库 引擎
  18. 新闻列表 android,- Android中实现简单的新闻列表
  19. android百度地图设置logo,缩放按钮,指南针的位置
  20. Springboot毕设项目老年健康数据管理及分析平台t46d0(java+VUE+Mybatis+Maven+Mysql)

热门文章

  1. sql server 锁定_如何使用SQL Server 2014托管锁定优先级控制在线索引重建锁定
  2. sas rename重命名_如何使用sp_rename命令在SQL Server中重命名表
  3. 连接Oracle时,navicat可以登录,但是用plsql登录会报 ora-01017:invalid username/password; logon denied
  4. iPhone X 弹出输入框隐藏后页面上移不回位问题的解决办法
  5. react项目开发入门
  6. vertical-align和line-height的深入应用
  7. Empire C:Basic 4
  8. cocos js响应过程
  9. HTTP Basic Authentication验证WCF Data Service
  10. [导入]vs2005视频教程 之 编译程序集和发布网站 [视频]