jdbc mysql wait_timeout_MySql wait_timeout问题解决办法。
写的是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问题解决办法。相关推荐
- MySql wait_timeout问题解决办法。
MySql wait_timeout问题解决办法. 参考文章: (1)MySql wait_timeout问题解决办法. (2)https://www.cnblogs.com/CryOnMyShoul ...
- php 和mysql中文乱码问题,常见php与mysql中文乱码问题解决办法
常见php与mysql中文乱码问题解决办法 乱码问题1:用PHPmyAdmin操作MySQL数据库汉字显示正常,但用PHP网页显示MySQL数据时所有汉字都变成了?号. 症状:用PHPmyAdmin输 ...
- linux mysql 存储过程乱码,mysql存储过程中 乱码问题解决办法
中文乱码无论在何时都是一个头疼的问题,mysql的存储过程参数也同样存在这个问题. 1.直接使用insert into语句没问题,能够正常插入汉字. 2.把insert into语句移到Procedu ...
- mysql连接timeout_mysql 连接超时wait_timeout问题解决
1.问题现象: com.mysql.jdbc.CommunicationsException: The last packet successfully received from the serve ...
- mysql max字符串报错_mysql [Warning] max_join_size报错问题解决办法
文章介绍了关于mysql [Warning] max_join_size报错问题解决办法,有需要的同学看看. 100716 06:32:45 d started 100716 6:32:45 [War ...
- mysql安装最后两项无响应,win10下安装mysql8.0.23 及 “服务没有响应控制功能”问题解决办法...
win10下安装mysql 1. 官网下载mysql 网址:https://www.mysql.com/downloads/ download页面往下拉:点击下图红框: 按下图指示操作: 下载之后解压 ...
- mysql 导出过长的数字列时变科学计数法问题解决办法
mysql 导出过长的数字列时变科学计数法问题解决办法 参考文章: (1)mysql 导出过长的数字列时变科学计数法问题解决办法 (2)https://www.cnblogs.com/yangjinw ...
- mysql中CONCAT值为空的问题解决办法
mysql中CONCAT值为空的问题解决办法 参考文章: (1)mysql中CONCAT值为空的问题解决办法 (2)https://www.cnblogs.com/fogwang/p/5536897. ...
- com.mysql.cj.jdbc.Driver连接失败解决办法
com.mysql.cj.jdbc.Driver连接失败解决办法 com.mysql.cj.jdbc.Driver连接失败解决办法 (1)错误伊始 (2)怎么还是报错? (3)最终解决 com.mys ...
最新文章
- [蓝桥杯2016初赛]卡片换位 bfs+set
- RouterOS DNS劫持 -- A记录
- 正则表达式从基础到深入实战
- 基于遗传算法实现自动组卷
- 荣耀9igoogle模式_iGoogle个性化主页的6种替代方法
- Adobe Reader PDF 护眼设置
- 学习python:异常处理
- 动态包含与静态包含的区别
- unity3D跑酷游戏源码,支持安卓+IOS双端 unity2019 C#语言开发
- android应用市场 更新,当贝市场(com.dangbeimarket) - 4.2.9 - 应用 - 酷安
- 我的折腾日记-- Ubuntu 16.04
- 永葆年轻的小虫子 大众甲壳虫1.2T
- java zip加密压缩_Java解压和压缩带密码的zip文件过程详解
- layui引入php项目,Layui使用入门教程
- Qt中的C++技术 张波
- DockerHub上最受欢迎的151个官方镜像,相传掌握第17个可以主宰宇宙!
- MySQL数据库 引擎
- 新闻列表 android,- Android中实现简单的新闻列表
- android百度地图设置logo,缩放按钮,指南针的位置
- Springboot毕设项目老年健康数据管理及分析平台t46d0(java+VUE+Mybatis+Maven+Mysql)
热门文章
- sql server 锁定_如何使用SQL Server 2014托管锁定优先级控制在线索引重建锁定
- sas rename重命名_如何使用sp_rename命令在SQL Server中重命名表
- 连接Oracle时,navicat可以登录,但是用plsql登录会报 ora-01017:invalid username/password; logon denied
- iPhone X 弹出输入框隐藏后页面上移不回位问题的解决办法
- react项目开发入门
- vertical-align和line-height的深入应用
- Empire C:Basic 4
- cocos js响应过程
- HTTP Basic Authentication验证WCF Data Service
- [导入]vs2005视频教程 之 编译程序集和发布网站 [视频]