我在我的项目中使用Apache Tomcat JDBC连接池。 我很困惑因为在重载下我一直看到以下错误:

12:26:36,410 ERROR [] (http-/XX.XXX.XXX.X:XXXXX-X) org.apache.tomcat.jdbc.pool.PoolExhaustedException: [http-/XX.XXX.XXX.X:XXXXX-X] Timeout: Pool empty. Unable to fetch a connection in 10 seconds, none available[size:4; busy:4; idle:0; lastwait:10000].
12:26:36,411 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/APP].[AppConf]] (http-/XX.XXX.XXX.X:XXXXX-X) JBWEB000236: Servlet.service() for servlet AppConf threw exception: org.jboss.resteasy.spi.UnhandledException: java.lang.NullPointerException

我的期望是,对于池,对新连接的请求将保留在队列中,直到连接可用。 相反,当池达到容量时,似乎拒绝了请求。 这种行为可以改变吗?

谢谢,

达尔

这是我的池配置:

PoolProperties p = new PoolProperties();
p.setUrl("jdbc:oracle:thin:@" + server + ":" + port + ":" + SID_SVC);
p.setDriverClassName("oracle.jdbc.driver.OracleDriver");
p.setUsername(username);
p.setPassword(password);
p.setMaxActive(4);
p.setInitialSize(1);
p.setMaxWait(10000);
p.setRemoveAbandonedTimeout(300);
p.setMinEvictableIdleTimeMillis(150000);
p.setTestOnBorrow(true);
p.setValidationQuery("SELECT 1 from dual");
p.setMinIdle(1);
p.setMaxIdle(2);
p.setRemoveAbandoned(true);
p.setJdbcInterceptors(
    "org.apache.tomcat.jdbc.pool.interceptor.ConnectionState;"
    + "org.apache.tomcat.jdbc.pool.interceptor.StatementFinalizer;" 
    + "org.apache.tomcat.jdbc.pool.interceptor.ResetAbandonedTimer");

#1楼 票数:12 已采纳

如果您看到日志Timeout: Pool empty. Unable to fetch a connection in 10 seconds设计/实现工作Timeout: Pool empty. Unable to fetch a connection in 10 seconds Timeout: Pool empty. Unable to fetch a connection in 10 seconds ,您的配置为p.setMaxWait(10000); 在放弃等待连接之前,请求线程等待10秒(10000毫秒,maxwait)。

现在您有两个解决方案,增加maxActive连接的数量或检查是否存在任何连接泄漏/长时间运行的查询(您不希望这样)。

  ask by Dal translate from so

未解决问题?本站智能推荐:

1回复

如何获取Tomcat的连接池统计信息?

我需要从部署的Web应用程序中获取我的tomcat服务器connection pool的统计信息。 例如, 活动连接数 , 空闲连接数 , 池大小 , 最后等待时间等, 我能够从org.apache.tomcat.dbcp.dbcp.BasicDataSource (narrowed fr
1回复

Tomcat连接池,maxActive和maxWait属性

我有一个在Tomcat中运行的Java服务,它使用来自org.apache.tomcat.jdbc.pool的Tomcat的DataSource和PoolProperties ,如“Plain PoolProperties ”示例 。 在具有Tomcat 8.0.29的阶段环境中,我在Cat
2回复

连接池Tomcat中的Scanario

我试图了解数据库连接池中的特定方案。 任何关于此的指示都将非常有用。 设置 : Tomcat网络服务器 MySQL服务器(最大连接数= 18) 配置webapp : webapp的context.xml具有数据库连接池的以下参数: 场景 : webapp打开并关
1回复

如何解决“无法为连接URL创建类'com.mysql.jdbc.Driver'的JDBC驱动程序”

首先我想说我检查了stackoverflow的所有答案,我无法解决这个错误! 请帮帮我! 我花了很多时间,但没有结果。 我正在尝试使用Tomcat8创建连接池。 我有一个例外: 值java.sql.SQLException:无法创建类 'com.mysql.jdbc.Driver'
1回复

需要帮助了解Tomcat线程池和JDBC连接池

我一直在使用Tomcat。 但我从来没有完全了解它是如何工作的,特别是线程池和JDBC连接池。 以标准的Spring Web应用程序(带有c3p0连接池)为例。 我的问题是 当TC启动时,是否会创建N个线程,每个线程都有一个applicationContext? 如果是这样,
1回复

Tomcat连接池,空闲连接和连接创建

我在Web应用程序中遇到以下问题。当我将服务器打开一段时间(例如24小时)时,我的应用程序停止工作。 我正在使用tomcat 7和连接池。我的数据库是MySQL。 我收到以下异常: 我发现,由于一段时间或某些原因,由于某些原因导致池化连接关闭后,会发生此错误。 我的问题是,当连接池中
1回复

如何从Tomcat中的JDBC连接池释放连接?

我在Tomcat中有一个JDBC连接池,我的max = 5个连接。 现在,当我获得6个连接时,我得到一个错误。 如何释放旧的连接以放入连接池,以便获得第6个连接? 我必须在Java中使用哪个命令来释放连接?
2回复

Tomcat8使用连接池连接到OracleDB的问题

我们有一个由 3rd 方供应商提供的应用程序,它在 Tomcat 8 和 JDK 8 上运行到带有 ojdbc7.jar 和 xdb6.jar 驱动程序的 Oracle 12 DB。 应用程序可以工作,但比预期的要慢。 在调查时,似乎应用程序被配置为使用连接池,但应用程序似乎正在为每个查询创建新连接