org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting
来源:互联网 发布:欧洲历史 知乎 编辑:程序博客网 时间:2024/05/16 11:16
今天在运行项目的时候,突然遇到这个问题,在网上找资料,说的是连接池泄漏,无法从连接池中获取有效的数据库连接。之前以为代码出了问题,结果重启了tomcat后就没出现该异常,在此记录,以免以后遇到同样的问题。
14:44:13,718 WARN org.springframework.jdbc.support.SQLErrorCodesFactory:230 - Error while extracting database product name - falling back to empty error codes
org.springframework.jdbc.support.MetaDataAccessException: Could not get Connection for extracting meta data; nested exception is org.springframework.jdbc.CannotGetJdbcConnectionException:Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:293)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:320)
at org.springframework.jdbc.support.SQLErrorCodesFactory.getErrorCodes(SQLErrorCodesFactory.java:216)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.setDataSource(SQLErrorCodeSQLExceptionTranslator.java:140)
at org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator.<init>(SQLErrorCodeSQLExceptionTranslator.java:103)
at org.springframework.orm.hibernate3.SessionFactoryUtils.newJdbcExceptionTranslator(SessionFactoryUtils.java:145)
at org.springframework.orm.hibernate3.HibernateAccessor.getDefaultJdbcExceptionTranslator(HibernateAccessor.java:453)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:410)
at org.springframework.orm.hibernate3.support.OpenSessionInViewFilter.doFilterInternal(OpenSessionInViewFilter.java:198)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:859)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:579)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1555)
at java.lang.Thread.run(Thread.java:619)
Caused by: org.springframework.jdbc.CannotGetJdbcConnectionException: Could not get JDBC Connection; nested exception is org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:82)
at org.springframework.jdbc.support.JdbcUtils.extractDatabaseMetaData(JdbcUtils.java:280)
... 43 more
Caused by: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
at org.apache.commons.dbcp.PoolingDataSource.getConnection(PoolingDataSource.java:114)
at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:1044)
at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:113)
at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79)
... 44 more
为了在开发阶段尽可能的暴露是否存在连接未完全释放的问题,将JNDI配置数据库连接的maxActive和maxIdle参数都设置的比较小。
有一种情况就是,如果某个页面存在大量的数据库查询操作(例如:此页面加载时将要建立5个connection),那么当我在此页面频繁的刷新页面时,将会抛出异常
org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object
经过调查发现,抛出此异常的原因为连接池泄漏,也就是再也无法从连接池中获取有效的数据库连接。
频繁的刷新页面导致上一次获取的connection还没有得到有效释放,下一次的connection请求已经到达,如是刷新多次后导致池资源耗尽,即所谓的连接池泄漏。
而且,在此种情况下,最糟糕的是异常发生后导致整个服务向连接池发起connection请求都将一直抛出如上异常,无法恢复到正常状态。服务宕机,必须重启tomcat才能恢复,这真是个可怕的事情。
- org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting
- org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting
- org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object异常原因
- org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool er
- org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted和java.util.NoSuchElementException: Timeout wa
- org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool ex
- tomcat 连接池泄露的问题:org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool exhausted, cause:java.util.NoSuchEleme
- org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory
- org.apache.tomcat.dbcp.dbcp.SQLNestedException解决方案
- org.apache.tomcat.dbcp.dbcp.SQLNestedException
- org.apache.commons.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Network error IOException: Connection refus
- Tomcat配置JNDI提示:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracle
- Tomcat配置JNDI提示:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'oracl
- invalid: "org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.j
- org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.microsoft.jdbc.sq
- org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory (Access deni
- Oracle版本:12c 出现的异常:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionF
- 问题:org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot load JDBC driver class 'com.mysql.jdbc.Dri
- Ext_标签面板_Ext.TabPanel
- 全局共享变量(Android)
- java值传递、引用传递和Scanner类
- 金额合计方法
- 使用命令wsimport构建WebService客户端
- org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting
- 启动tomcat是出现错误( Parse Fatal Error at line 1 column 1: Content is not allowed in prolog.)
- intel 10G BASE-T 以太网控制器: X540
- 也谈谈啥叫中医?
- GUI 剖析之 多种方法解决多个实例运行问题
- 【安卓电视盒软件】展示一套我写的智能电视直播软件,支持遥控器操作!ffmpeg内核!
- Map的三种遍历方法
- jquery操作
- tomcat类图一