在使用hibernate时,报这个错Mysql Cannot get a connection, pool error Timeout waiting for idle object

问题

 Cannot get a connection, pool error Timeout waiting for idle object

 

原因

   db.properties中配置的maxWait为连接池获取mysql连接最大等待时间,超过了这个时间仍然没获取到就会报这个错。

深入分析一下为啥会获取不到Mysql连接,手动用来浏览器请求发送,发现当连接达到MaxActive时会获取不到,而剩下的50个都在Sleep状态,原来是用完后没有回收导致的。

如何在hibernate中,就是session没有关闭的问题,导致线程池的session数满了。

原因1

应用程序没有很好的关闭使用后的连接

方案1:

请检查自己的应用程序是否正确关闭了数据库连接,注意一定要放到finally中关闭。(不推荐,让数据库连接池去管理连接),反正开了session,都要进行关闭

方案2:

如果确实无法排查出具体哪些代码没有关闭数据库连接,可以通过配置参数完成自动回收,并记录回收日志,以便于定位问题代码;tomcat中连接池的配置自动回收参数为:removeAbandoned、 removeAbandonedTimeout、logAbandoned三个。(推荐)

原文地址:https://www.cnblogs.com/wwssgg/p/14484612.html