apache-commons-dbcp connection pooling maxActive parameter



我们在应用程序中使用Apache DBCP 1.4进行数据库连接池和Java后端。我们将 maxActive = 20 的值设置为(默认情况下(,在某些情况下,请求需要 20 个以上的连接才能执行。此时应用程序挂起/无响应。

我已将值增加到最大活动 = 50。然后执行成功完成。在 Apache DBCP 的文档中,我已经看到我们可以输入 maxActive = -1 的值,这不会设置连接创建的上限。我可以设置 maxActive = -1 吗,如果没有,您能否帮助我了解为什么它不可取,以及我们可以为 maxActive 设置的下降值,以便我的应用程序不会挂起/无响应。

final BasicDataSource basicDataSource = new BasicDataSource(); 
basicDataSource.setUrl(url);
basicDataSource.setUsername(user);
basicDataSource.setPassword(password);
basicDataSource.setDriverClassName(driver);
if (driver.contains("oracle")) {
  basicDataSource.setValidationQuery("SELECT 1 FROM DUAL"); } 
  basicDataSource.setMaxTotal(20);
  basicDataSource.setMaxIdle(20); 
  basicDataSource.setDefaultAutoCommit(false);
}

限制数据库池中连接数的动机

  • 客户端可以创建的最大连接到 DBMS 的连接数通常是有限的。通过限制节点可以同时使用的连接数,可以计算硬限制并避免满足硬限制。
  • 如果您的应用程序存在连接泄漏,这将有望在单个节点上导致错误,而不是在整个集群上,因此您可以更早地处理它,而不是在 DBMS 停止工作时处理它,因为所有可能的连接都悬而未决。