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 ...
随机推荐
- JSP-03-实现数据传递
会话跟踪:隐藏表单域.URL重写和Cookie 3.1 传参方法 get /post 区别 3.2 request 获取参数 数据类型 变量名 = (数据类型)request.getPar ...
- zw版【转发·台湾nvp系列Delphi例程】HALCON Component Histogram
zw版[转发·台湾nvp系列Delphi例程]HALCON Component Histogram unit Unit1;interfaceuses Windows, Messages, SysUti ...
- 修改linux下mysql目录权限
1.进入当前目录:例cd /srun3/mysql 2.修改权用户限 chown -R mysql ipt_authd_remote(表示给ipt_authd_remotemysql权限) 3.修改用 ...
- URL 中#号,? ,&的作用 (摘抄整理 链接为学习地址)
1. 一峰的网络日志:http://www.ruanyifeng.com/blog/2011/03/url_hash.html get: 1.页面滚动到指定页面的指定位置 (eg: http://ww ...
- 视频处理控件TVideoGrabber中如何混合多个视频源(1)
其实一个或是几个作为普通的视频源使用的TVideoGrabber组件,可以进行混合来作为一个TVideoGrabber组件使用,这些普通的组件可以是视频捕捉设备或是视频剪辑等.同时这个混合的组件独立于 ...
- Android剪切板传递数据传递序列化对象数据
一.剪切板的使用介绍 1. 剪切板对象的创建 使用剪切板会用到,ClipboardManager对象,这个对像的创建不可以使用构造方法,主要是由于没有提供public的构造函数(单例模式),需要使用A ...
- 设置 textarea 默认滑动到底部
javascript: var textarea = document.getElementById('textarea_id'); textarea.scrollTop = textarea.scr ...
- struts2的两个核心配置文件
struts2的两个核心配置文件,即:struts.default.xml和struts.properties A,位置:都在struts2-core-version.jar文件中 B,作用,stru ...
- Oracle 行迁移和行链接
一.行迁移 1.1.行迁移概念 当一个行上的更新操作(原来的数据存在且没有减少)导致当前的数据不能在容纳在当前块,我们需要进行行迁移.一个行迁移意味着整行数据将会移动,仅仅保留的是一个转移地址.因此整 ...
- anroid 查看签名信息的方法
1.把app改成压缩文件 2.解压以后找到META-INF\CERT.RSA 3.在CMD命令行里面输入: keytool -printcert -file E:\META-INF\CERT.RS ...