问题标签 [jdbc-pool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2106 浏览

spring-boot - Spring Boot 和 Spring Cloud AWS 数据源池配置

我在 EC2 实例上有一个连接到 RDS(MySQL)的应用程序,8 小时后数据库连接从 MySQL 关闭,当应用程序尝试读/写数据时,我得到以下异常

还有这个例外:

这会在应用程序运行 8 小时后发生。我的配置文件(YAML):

我在用着:

  • Java 1.8
  • Spring boot 1.5.4.RELEASE(JAR部署)
  • Spring Cloud AWS JDBC 和 AWS 自动配置,1.1.3.RELEASE

我的POM是:

我的问题是:

如何在 Spring Boot for AWS (Amazon) 中配置数据源池?一旦应用程序部署在 EC2 上,我就记录了 DataSource 配置,但它没有配置为 withtest-while-idle和其他配置,这是来自 EC2 的日志:

我检查了此页面,但找不到从属性文件(在我的情况下为 yaml)配置池的方法...

0 投票
0 回答
372 浏览

tomcat - 在 tomcat servlet 应用程序中保持数据源静态的最佳方法

我在 tomcat 8 中有一个带有 servlets 技术的网络应用程序。对于数据库连接,我有一个 servlet 侦听器,它保留一个静态数据源和一个执行 getConnection 的静态方法。我可以调用 servletListener.getConnection(); 在 servletListener.getConnection();

但是内部类不能调用它。

我在网上找到了这门课:

我喜欢它,因为我可以从所有课程中调用它。我不确定这是否是最好的方法。

其他人的做法?有什么推荐吗?

0 投票
1 回答
573 浏览

scala - playframework 2.6中配置多个连接池

我在这里查看了文档:https ://www.playframework.com/documentation/2.6.x/ScalaDatabase#How-to-configure-several-data-sources 。您可以定义多个数据库连接:

您可以使用以下代码在代码中引用:

但是如何为每个连接自定义连接池呢?

根据此文档:https ://www.playframework.com/documentation/2.6.x/SettingsJDBC您可以指定默认配置、数据库等连接池的原型设置等。如何定义每个连接池的设置?也许一个连接池只需要一个连接,而另一个需要更多。

谢谢

0 投票
1 回答
800 浏览

database-connection - 同一个数据库上的多个连接池

在我的应用程序中,我需要在启动期间配置 2 个数据库。它们被创建为 Tomcat JDBC 池 - 具有单独池属性的 org.apache.tomcat.jdbc.pool。如果我将数据库 URL、用户名和密码都配置为相同,即都指向同一个数据库服务器,那么如何创建连接池?它会创建 2 个具有不同属性的池还是只创建一个?如果它只有一个,哪些池属性将设置到池中 - 第一个创建的还是下一个创建的?另外请建议是否有任何工具可用于查看与数据库的连接以及在其上创建的池?

0 投票
0 回答
5242 浏览

postgresql - org.postgresql.util.PSQLException:此连接已关闭。长时间运行的事务的错误

我们收到“org.postgresql.util.PSQLException:此连接已关闭。” 在我们的一项部署中,仅用于长时间运行的事务(超过几分钟):

我们的堆栈如下:

  • Postgresql 9.2(在数据库服务器 Ubuntu 16.03 上)
  • PgBouncer(在应用服务器 Ubuntu 16.03 上)
  • 罐子(在应用服务器 Ubuntu 16.03 上)
    • org.postgresql:postgresql:9.2-1004-jdbc41
    • javax.transaction:jta:1.1
    • org.apache.commons:commons-pool2:2.4.2
    • org.apache.commons:commons-dbcp2:2.1.1'

Postgresql 和 Pgbouncer 使用默认参数,我们为 dbcp 使用以下参数:

我们有其他具有相同参数的部署,但我们没有遇到同样的问题。

我怀疑有一个防火墙/Nat 会在超时后重置连接,但我不知道如何检查是否是这种情况。如果您能指导我检查哪些日志/参数/配置可能导致此异常,我将不胜感激。

我已经测试过,如果 Postgresql 和 PgBouncer 在同一台服务器上,则不会发生此问题。我还调查了 Postgresql 日志,没有记录任何错误消息。

0 投票
1 回答
797 浏览

java - H2 - Tomcat jdbc 连接池一旦达到最大限制就不会回收连接

问题陈述

我们已经在嵌入式模式下使用 H2 一段时间了。它上面配置了一个连接池。以下是当前池配置:

H2配置:

*跳过用户名和密码属性。

我们通过记录池属性验证了上述配置生效。

此设置的问题是我们观察到定期(尽管是间歇性的)连接池耗尽,一旦池达到最大限制,它就会开始为某些查询抛出以下异常。

SqlExceptionHelper.logExceptions(SqlExceptionHelper.java:129) - [http-apr-8080-exec-38] 超时:池为空。无法在 3 秒内获取连接,无可用 [size:200; 忙:200;空闲:0;最后等待:3000]。

此后,即使在我们重新启动 Web 服务器(在本例中为 tomcat)之前,它也无法从该状态恢复。

H2驱动依赖:

查询模式和吞吐量

我们使用 h2 为每个请求加载一些数据,然后执行一些(大约 50 个)SELECT 查询,最后删除数据。这导致在 h2 上每分钟(下班时间除外)持续 30k-40k 调用(根据新的遗迹监控)。

每个读取操作都会获取一个新连接并在执行后释放它。

观察

  • 应用程序重新启动后,池利用率最低,直到池利用率突然上升并最终达到最大限制的时刻。这发生在 1-2 天的过程中。
  • 一旦池达到最大连接限制,与返回的连接计数相比,借用的连接计数以更快的速度增加,否则返回的连接计数彼此非常接近。
  • 同时,放弃的连接数也开始随着放弃日志的增加而增加。
  • 有趣的是,池耗尽后查询响应时间保持不变。所以这种排除了慢查询。
  • 这个问题甚至发生在流量最少的最奇怪的时间。所以它与流量无关。

请指导我们正确的方向来解决这个问题。

更新

最近,当发生此类事件时,我们在堆栈跟踪中发现了以下原因:

原因:org.h2.jdbc.JdbcSQLException:数据库可能已在使用中:null。可能的解决方案:关闭所有其他连接;使用服务器模式 [90020-196]

引起:java.lang.IllegalStateException:文件被锁定:nio:/root/h2/cartdb.mv.db [1.4.196/7]

引起:java.nio.channels.OverlappingFileLockException

因此,在深入研究之后,我们决定转移到内存模式,因为我们不需要在应用程序的生命周期之外保留数据。因此,不应发生文件锁定,从而减少或消除此问题。

无论哪种情况,都会回来更新。

0 投票
1 回答
586 浏览

java - 如何链接 c3p0 池 identityTokens 和 JDBC 池名称

首先,请记住,我是监控管理员而不是 Java 开发人员。

我想监控c3p0池的一些属性值,我发现这样的池有一个唯一identity Token性,它由一个字母数字字符串和一个用管道字符连接的十六进制字符串组成,例如:

context.xml但是在 tomcat 服务器的文件中找到的 JDBC 池只显示标准名称:

我使用 JAR 通过 JMX 连接查询正在运行的 Java 进程的 MBean。这里Catalina:type=Resource是:

这里是com.mchange.v2.c3p0那些

这些是我的问题:

  1. 如何链接身份令牌和资源池名称?

  2. 在我的示例应用程序中,文件中定义了 5 个资源,context.xml但有 15 个 c3p0 池。这也可以在C3P0Registry/AllIdentityTokenizedCountC3P0Registry/AllPooledDataSourcesCount属性中找到。不是有一对一的关系吗?

  3. 身份令牌是如何制作的?它们是随机的吗?这两个字符串是什么意思?它们是否与流程或机器价值相关联?

谢谢

0 投票
1 回答
674 浏览

spring - 部署在连接到 mariadb 的 tomcat 上的 Spring 应用程序的连接池的最佳选择

在阅读了基于 jdbc 连接池的多个文档后,我无法得出一些结论。哪种连接池方法最适合部署在 tomcat 上并连接到 mariadb 的 spring 应用程序。

mariadb 提供了自己的连接池,另一方面,多个外部池库存在 HikariCp、DBCP、tomcat-jdbc 等。

0 投票
0 回答
1093 浏览

tomcat - 使用 dbcp2 和 ojdbc6 Oracle 驱动程序与 Tomcat 8 的连接泄漏

我在我们的开发环境中修复连接泄漏时遇到了一些麻烦。

我正在使用:Apache Tomcat 8.5 服务器:

  • commons-dbcp2-2.1.1.jar
  • commons-pool2.2.4.2.jar
  • ojdbc6.jar Oracle 驱动程序
  • Oracle 客户端 12.1.0.2.0 64 位

我有一些资源声明为:

每次我关闭/重新启动 Tomcat 服务器时,DBCP 池和 Oracle DB (11g) 之间的所有连接都保持打开状态。我想Tomcat应该照顾好这个......

知道如何解决这个问题吗?

编辑:它似乎与开发人员环境有某种关系。在某些计算机上,连接已关闭,但在其他计算机上,它们保持打开状态。我们使用相同的数据库、相同的 Oracle 客户端、驱动程序和相同的 Tomcat 服务器。

0 投票
1 回答
1314 浏览

java - tomcat - HTTP 连接器 maxThreads / acceptCount 和 JDBC 池 maxActive 之间的比率

之间是否存在常识公认的比率

  • HTTP 连接器maxThreads(处理用户请求的最大 HTTP 线程数),
  • HTTP 连接器acceptCount(当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度)
  • DB pool maxActive(池中的最大 DB 连接数)配置属性

当涉及到使用大量使用数据库的tomcat的Web基础应用程序时?

我的意思是,例如,我们几乎每个 HTTP 请求连接都在密集使用数据库。因此,当我们拥有 fe 时,配置的 DP 池maxActive(例如 100)要少得多,而 HTTP 连接器的maxThreads (例如 200)要大两倍。那么就有可能在 HTTP 连接之间共享一个相同的 DB 连接。这可能会导致大量的数据库使用/数据库停止连接

我知道在大多数情况下,Web HTTP 请求配置与数据库池配置无关,但是属性之间的比率(maxThreads/acceptCount maxActive)是否有常见的案例/实践?例如,HTTP maxThreads 大于 DB maxActive 是一种常见的做法(但根据我们的示例,认为 100% 大太多了 - 可以说最大 20% 或 50%?),假设我们有更大的 accpetCount值,所以在应用程序处理其他 HTTP 请求时将 HTTP 请求排队?

这里有类似的问题:Tomcat - 在 Http 连接器中配置 maxThreads 和 acceptCount但没有更准确的答案