当前位置: 代码迷 >> 综合 >> 连接池频繁访问数据库导致 Timeout waiting for idle object
  详细解决方案

连接池频繁访问数据库导致 Timeout waiting for idle object

热度:69   发布时间:2023-11-19 22:02:27.0

在这里插入图片描述
在这里插入图片描述
解决方案:
方案一、
show variables like ‘%timeout’;
set wait_timeout= 57,350,142;
set interactive_timeout = 57,350,142
方案二、
重启mysql进程
方案三、
如果在你的程序中正确关闭connections
但是这里有一点要注意要把关闭的语句写在finally中,
如果你写在try{}中出现异常的话是无法正确关闭的。

如下

} catch (SQLException e) {
} finally {
try {
if (stmt != null)
stmt.close();
if (dbConnection != null)
dbConnection.close();
} catch (SQLException e) {

}

最后一个是最实用的的,我亲身经历再加上度友们的建议
在这里插入图片描述
我之前虽然都关闭连接了,但是3个conn,st,rs写在一个try{}cath(){}finally{关闭三个连接}

总结:

出现这些问题:

不要重启服务器,这个没用的,虽然重启之后正常了,但是没多久又不行,因为是程序问题

一定一定一定一定一定一定一定一定检查程序,关闭连接,关闭连接

多个conn,rs st的一定要分开了,结果集用集合装起来,不要如下:

多个rs放在一起如果出错就会导致其中一个连接无法收回,一直处于阻塞

try{

while(rs.next){

num = rs.getString(1);
// 对每个编号进行最近时间的查询基站
conn1 = JdbcUtils_DBCP.getConnection();
String sqls = “SELECT * FROM yh WHERE number=’” + num + “’ ORDER BY TIME DESC LIMIT 1”;
st1 = conn1.prepareStatement(sqls);
rs1 = st1.executeQuery();
if (rs1.next()) {
times = rs1.getString(8);//这个是时间
// 判断最后一条记录的时间跟当前时间的距离
// 获取当前的时间
Date date = new Date();

}

}catch(){

}finally{

关闭连接

}

  相关解决方案