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 ...
随机推荐
- [OrangePi] If you are using an older image
Download scriptbin_kernel.tar.gz from Mega, unpack. Copy uImage_OPI-2 or uImage_OPI-PLUS (depending ...
- [经典php视频]构建正则表达式解析网页中的图像标记<img>
这是高洛峰php视频中的一段,视频中一边分析需要的功能,一边构建greg_match函数的参数,边讲解边实战,是非常好的一种构建功能的演示. 你不可能把浩瀚的IT资料都记在脑袋里,也不可能随时随地透过 ...
- 【DP水题】投票问题(二)
投票问题(一) [试题描述] 欧阳文和欧阳武竞选学联主席,汪梁森负责唱票,共有m+n张,结果欧阳文获胜,已知欧阳文和欧阳武分别获得 m 张票和 n 张票(m>n).现在请你计算在唱票过程中欧阳文 ...
- android 学习随笔十五(Activity的生命周期与摧毁时返回数据 )
1.Activity的生命周期 onCreate:创建时调用 onStart:在屏幕上可见,但是还没有获得焦点 onResume:可见并且获得焦点 onPause:可见,但是失去焦点 onStop:不 ...
- Java中main方面面试题
1.不用main方法如何定义一个类? 不行,没有main方法我们不能运行Java类. 在Java 7之前,你可以通过使用静态初始化运行Java类.但是,从Java 7开始就行不通了. 2.main() ...
- GPS模块的AT指令集
AT+CPIN? 查询sim卡状态. 接着: AT+CGCLASS="B"AT+CGDCONT=1,"IP","CMNET"AT+CGATT ...
- taglib指令
taglib:用来引用标签库并设置标签库的前缀,(允许JSP页面使用用户自定义标签) 语法:<%@ taglib uri="tagLibraryURI" prefix=&qu ...
- NSScanner用法详解
NSScanner类用于在字符串中扫描指定的字符,尤其是把它们翻译/转换为数字和别的字符串.可以在创建NSScaner时指定它的string属性,然后scanner会按照你的要求从头到尾地扫描这个字符 ...
- 八大排序算法之四选择排序—堆排序(Heap Sort)
堆排序是一种树形选择排序,是对直接选择排序的有效改进. 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素) ...
- 【转】使用JDK自带jvisualvm监控tomcat
转载地址: http://my.oschina.net/kone/blog/157239 jdk自带有个jvisualvm工具.该工具是用来监控java运行程序的cpu.内存.线程等的使用情况.并且使 ...