DbUtils使用时抛出Cannot get a connection
java.sql.SQLException: Cannot get a connection, pool error Timeout waiting for idle object
Caused by: java.util.NoSuchElementException: Timeout waiting for idle object
根据字面很容易理解,获取链接超时。
一、查看当前数据库的连接情况:
登录Mysql后台,执行命令:show full processlist;
发现我的程序建立了10个链接。
进一步测试,每发送一次数据库请求,就建立一个新的链接。
二、查看我的Dbcp2的配置:
<property name="initialSize" value="1" />
<property name="maxTotal" value="10" />
<property name="maxIdle" value="3" />
<property name="minIdle" value="0" />
<property name="maxWaitMillis" value="3000" />
结果是确认了,程序建立的连接达到maxTotal的限制,而且都是活动的链接,所以第11条连接是创建不出来了,等待的时间超过3000ms,抛出。
三、需要手动的释放的数据库的链接?
我的代码如下:
public int queryCount(DataSource ds,String sql){
queryRunner = new QueryRunner(ds);
try{
return ((Long)queryRunner.query(ds.getConnection(), sql, new ScalarHandler())).intValue();
}catch(SQLException e){
logger.error("Error occured while attempting to update data", e);
}
return ConstantCc.FAILED;
}
忽然发现,手动的获取链接有些多余,改动如下:
public int queryCount(DataSource ds,String sql){
queryRunner = new QueryRunner(ds);
try{
return ((Long)queryRunner.query(sql, new ScalarHandler())).intValue();
}catch(SQLException e){
logger.error("Error occured while attempting to update data", e);
}
return ConstantCc.FAILED;
}
再测试,就不会建立很多个链接了,每次只有一个链接。
四、新的问题,每次数据库操作都会重新建立一个链接,然后保持这条链接,直到下次请求。
第一次数据库操作:
1.建立一条链路A;
2.A保持链接;
第二次数据库操作:
1.拆除链路A;
2.建立一条链路B;
3.B保持链接;
第三次数据库操作:
1.拆除链路B;
2.建立一条链路C;
3.C保持链接;
这个是合理的吗?A的拆除条件是什么?为什么?有时间要搞明白。
DbUtils使用时抛出Cannot get a connection的更多相关文章
- 调用远程主机上的 RMI 服务时抛出 java.rmi.ConnectException: Connection refused to host: 127.0.0.1 异常原因及解决方案
最近使用 jmx 遇到一个问题,client/server 同在一台机器上,jmx client能够成功连接 server,如果把 server 移植到另一台机器上192.168.134.128,抛出 ...
- adb4robotium跨进程框架抛出InputStream cannot be null的异常的解决方案
转自:http://blog.csdn.net/qingchunjun/article/details/43448371 之前我写的关于利用adb框架来进行robotium跨进程操作的文章中,有些朋友 ...
- Java中,异常的处理及抛出
首先我们需要知道什么是异常? 常通常指,你的代码可能在编译时没有错误,可是运行时会出现异常.比如常见的空指针异常.也可能是程序可能出现无法预料的异常,比如你要从一个文件读信息,可这个文件不存在,程序无 ...
- WCF服务创建与抛出强类型SOAP Fault
原创地址:http://www.cnblogs.com/jfzhu/p/4060666.html 转载请注明出处 前面的文章<WCF服务的异常消息>中介绍过,如果WCF Service发生 ...
- 窥探Swift编程之错误处理与异常抛出
在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天博客的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中 ...
- Dbcp2抛出org.apache.commons.dbcp2.LifetimeExceededException
三月 24, 2016 5:16:33 下午 org.apache.commons.dbcp2.BasicDataSource onSwallowException 警告: An internal o ...
- 本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止。某些服务在未由其他服务或程序使用时将自动停止。——Oracle监听器服务无法启动!
问题: oracle服务设置为手动启动.但是开机后手动启动监听服务后弹出框,提示“本地计算机上的OracleOraDb11g_home1TNSListener服务启动后停止.某些服务在未由其他服务或程 ...
- [习题]日历(Calendar)控件的障眼法(.Visible属性),使用时才出现?不用就消失?
原文出處 http://www.dotblogs.com.tw/mis2000lab/archive/2013/09/02/calendar_icon_visible.aspx [习题]日历(Cal ...
- 本地计算机上的XXX服务启动后停止。某些服务在未由其它服务或程序使用时将自动停止。咋整?
用C#写个windows服务,安装部署后去启动时,提示说“本地计算机上的XXX服务启动后停止.某些服务在未由其它服务或程序使用时将自动停止”.咋整?就像下面酱紫: 度娘说不知道咋整,我想把程序附加到w ...
随机推荐
- 三层架构与MVC的区别
我们平时总是将混为一谈,殊不知它俩并不是一个概念.下面我来为大家揭晓我所知道的一些真相. 首先,它俩根本不是一个概念. 三层架构是一个分层式的软件体系架构设计,它可适用于任何一个项目. MVC是一个设 ...
- 重要的事情说三遍:列表 ul / ol 等是块级元素,是块级元素,块级元素
HTML 块级元素 大多数 HTML 元素被定义为块级元素或内联元素. 编者注:“块级元素”译为 block level element,“行内元素”译为 inline element. 块级元素在浏 ...
- asp.net项目发布网上-当前自定义错误设置禁止远程查看应用程序
早上服务器的系统突然出错了,悲剧~ ==============异常信息:============================== 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程 ...
- 不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数
不允许调用库函数,也不允许使用任何全局或局部变量编写strlen函数. 这是一道面试题,可以使用递归的方式解答,答案如下: #include <stdio.h> int mylen(cha ...
- android 学习随笔二十三(动画:Fragment )
Fragment * 用途:在一个Activity里切换界面,切换界面时只切换Fragment里面的内容 * 在一个Activity中切换多个界面,每个界面就是一个Fragment* Fragmnen ...
- redmine plugin
http://wangsheng2008love.blog.163.com/blog/static/78201689200992064615770/
- JAVA学习方法
我觉得要想学好的话,首先,你得会用,能玩的起来,然后才会慢慢激发你的兴趣,它为何这么用?就这样一步一步的去探索,不断地积累,总结.编程讲究的是思维,死记硬背是没有意义的,想学好编程就一个字:敲,俩字 ...
- iOS 判断相机权限是否被限制,判断相机是否可以使用
判断相机权限是否被限制 需要导入 AVFoundation 类 [objc] view plain copy #import <AVFoundation/AVFoundation.h> ...
- HDU 4035:Maze(概率DP)
http://acm.split.hdu.edu.cn/showproblem.php?pid=4035 Maze Special Judge Problem Description When w ...
- php socket 客户端代码
<?php class SendDevAction{ //log日志文件 private $logDevFile = ""; //日志字符串 private $logStr ...