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

 

如果有书写错误的地方,或者是有问题的地方请及时评论或者是私信,以免误导个别萌新。

虽然,我也是个萌新。

你好,我叫吕小布

 

 

 

 

 

 

 

你可能感兴趣的:(Eclipse,java)