Cannot get a connection, pool error Timeout waiting for idle object
一、摘要:
在跑程序采集数据,转换数据,再把转换后的新格式的数据增添到数据库中的过程中,突然报错:
Cannot get a connection, pool error Timeout waiting for idle object
根据错误,可以初步判断是连接池出现了问题。
二、出现错误的原因
在使用DBCP连接池时:
2.1.情况一
方法A里面获得一个连接,然后做一些DB操作。然后释放该连接。但是方法A里面调用了方法B。方法B的逻辑和方法A的类似。
这样有可能出现:一个连接在没有被释放的情况下,又去申请一个新连接。运行一段时间之后连接池耗光。就会出现类似的问题。
2.2.情况二
如果用到了多线程,当线程1和线程2还没跑完的时候,线程3也开始运行并且调用service的时候就会导致取不到session,抛出如上异常
三、解决办法
3.1.根本解决:
查看代码中是不是有错误中的第一个原因,如果有,需要在DB连接用完后及时释放
3.2.直接解决
如果是第二个错误情况,或者代码不太好改,可以将数据源的相关参数调大一些来解决:
maxActive、maxIdle、minIdle
四、相关问题:
4.1.参数设置导致的异常
如果不合理的设置了上述三个参数,可能会报错:
ORA-12519: TNS:no appropriate service handler found
如果有书写错误的地方,或者是有问题的地方请及时评论或者是私信,以免误导个别萌新。
虽然,我也是个萌新。
你好,我叫吕小布
还没有评论,来说两句吧...