An attempt by a client to checkout a Connection has timed out.

丨苏幕遮丨 2015-10-08 10:24:12
各位大大好,小弟遇到了一个不理解的问题,求解决方法:
有一个每5分钟执行一次的定时任务,执行了两次查询和一次写入数据库的操作。在运行到第三天时发生了如下问题:
An attempt by a client to checkout a Connection has timed out.
然后我重新执行那个任务,结果还是报一样的错,只能重新启动了这个程序,才能正常的开始执行这个定时任务。

在网上查了一下,说是数据库连接没有释放,我代码里这样写:

public int getBoxid(String Boxno) {
Connection conn = null;
int Boxid = 0;
try {
String userName = Constant.ROOT;
String password = Constant.PASSWARD;
String url = Constant.URL;
Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, userName, password);
PreparedStatement ps = null;
ResultSet rset;
String sql = "select t.ID from t_box_info t where t.BOXNO = '"
+ Boxno + "'";
ps = conn.prepareStatement(sql);
rset = ps.executeQuery();

while (rset.next()) {
// Boxid
Boxid = rset.getInt(1);
}
} catch (Exception e) {
System.err.println("Cannot connect to database server");
} finally {
if (conn != null) {
try {
conn.close();
System.out.println("Database connection terminated");
} catch (Exception e) { /* ignore close errors */
}
}
}
return Boxid;
}

请问,怎么修改能够做到确保我申请的连接能够释放呢?
...全文
193 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
丨苏幕遮丨 2015-10-09
  • 打赏
  • 举报
回复
引用 1 楼 trocp 的回复:
当程序卡住的时候,去Mysql命令行去执行:show processlist , 看看显示的记录有多少条,正常情况只有几条,如果有几百条记录,说明真是数据库连接没释放。(如果连接数据库的应用程序太多,需要另行判断)
您好,我同时在定时运行几个任务,它们是对于这个数据库不同表的操作,只有这个卡住了,别的正常运行。
oO临时工Oo 2015-10-08
  • 打赏
  • 举报
回复
当程序卡住的时候,去Mysql命令行去执行:show processlist , 看看显示的记录有多少条,正常情况只有几条,如果有几百条记录,说明真是数据库连接没释放。(如果连接数据库的应用程序太多,需要另行判断)

50,639

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧