问题标签 [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 回答
2539 浏览

tomcat - 数据库连接数大于 DBCP maxTotal 设置的数

我正在使用 Tomcat(版本 8.0.43)运行一个 Java Web 应用程序。

我将 tomcat-dbcp.jar(Tomcat8.0.43 附带)移至jdk/jre/lib/extjre 可用。

我认为我使用的是 Tomcat DBCP(而不是 Apache Commons DBCP),但正如我从文档中了解到的那样,配置参数与 Apache Commons DBCP 相同,详见此处

Resource因此,我在中为连接池设置了以下元素context.xml

最近,我的日志中出现错误:

MySQLNonTransientConnectionException:连接太多

所以我检查了发生错误时我有多少连接(通过 Amazon CloudWatch for RDS。特别是“ConnectionCount”),它可以达到高达 150 个连接。如果我将maxTotal连接数设置为 100,这怎么可能?

我在多个实例上运行我的应用程序。该maxTotal属性是否适用于每个实例(例如:如果我在 2 个实例上定义了连接池,那么我的 maxTotal = 100 + 100 = 200?)

就好像我在Resource元素中设置的属性被忽略了。可能是我的设置有问题吗?我没有像我想象的那样使用tomcat DBCP吗?

此外,如果我进一步Exception查看上面引用的 StackTrack,我会看到

org.apache.tomcat.dbcp.dbcp2.BasicDataSource.getConnection

叫做。我不确定这是否意味着我使用的连接池 ( DBCP2) 与我假设使用的连接池 (Tomcat DBCP) 不同。

0 投票
1 回答
90 浏览

jdbc - 可以很好地处理经常空闲的连接的 JDBC 连接池库?

假设有这个代码存在于服务器端后端:

这里的问题是它externalApiCall()可能非常慢,并且它会保持许多数据库连接处于打开状态(即使它没有被使用),并且可能导致连接的最大数量用完。这将对我的应用程序中不依赖任何外部 API 的其他部分有害,我想避免这种情况。

上面的代码被简化了,实际上我使用了类似 ServletFilter 的东西,当它接收到 http 请求时,它会将 Connection 放入 ThreadLocal 中,因此很难改变在业务逻辑开始时打开 Connection 的整体机制。

所以我的问题是:没有任何好的连接池库、包装器或可以很好地处理这种情况的东西吗?例如,只有在创建 Statement 对象时才打开真正的数据库连接,然后在关闭 Statement 时自动关闭连接。目前我使用Tomcat DBCP。

0 投票
1 回答
70 浏览

osgi - Apache felix 无法将 dbcp2 作为包加载

我创建了一个 OSGi 包,它使用 apache commons dbcp2 创建一个数据库连接池。我使用 apache felix gogo 作为运行时来启动我的包。我已经将多个其他外部库毫无问题地加载到 apache felix 中:

图片在这里(不能发布没有代表): https ://i.gyazo.com/c779ccaba20e3fa327d61a621748d8dc.png

但是,每次我尝试启动捆绑包中需要的 dbcp2 捆绑包时,都会出现以下错误:

图片在这里(不能发布没有代表): https ://i.gyazo.com/ac7b673e63b9e6ad764af2e6adddb19a.png

我发现有一些可用的 Apache mixservice 包,但它包含 dbcp 1.4,我需要 dbcp 2.5.0 或更高版本。

需要做什么才能使 apache felix 能够将 dbcp2 作为其他项目所需的库加载?

0 投票
1 回答
273 浏览

tomcat - Tomcat 连接池:tomcat-jdbc 与 tomcat-dbcp,哪个更好?

Tomcat 使用 tomcat-dbcp 作为默认连接池策略,但是他们也提供 tomcat-jdbc 作为替代方案。哪个连接池更适合并发负载?tomcat-jdbc 没有像 jdbcInterceptors 这样的额外参数,tomcat-dbcp 是否有任何匹配的拦截器参数?另外,哪一个有更好的社区支持和积极发展?

0 投票
1 回答
57 浏览

database - Datomic 的长寿命数据库连接是如何为 sql Connections 实现的?

根据Datomic 的连接文档

数据连接不遵循获取/使用/释放模式。它们是线程安全的、缓存的和长寿命的。许多进程(例如应用程序服务器)永远不会调用释放。

我很想知道这是如何在实践中实现的,特别是对于 sql 连接。从客户端/用户的角度来看,这非常好,因为您根本不需要担心线程池,它简化了客户端代码,以及您需要大量推理的内容。这是我喜欢在其他具有 SQL 连接的应用程序中复制的东西。

将问题分解成更小的部分:

  • 在将 Datomic 连接视为长期存在时需要考虑哪些挑战?
  • 在处理 JDBC 连接时,该方法是否普遍适用,还是仅适用于问题的子类(包括 Datomic 的)?
  • 我可以看到 Tomcat 的 JDBC 连接池在后台使用,从 Datomic 连接的角度来看,这个池是如何用于实现长寿命连接的?
  • 在实践中,您何时在幕后使用单独的 JDBC 连接,例如,您是否使用单独的连接进行读取和写入?
0 投票
1 回答
246 浏览

java - 使用 java 的 Postgres 连接池

我在java中使用多线程概念,线程的职责是连接到postgres并将我的csv上传到表中。到目前为止,我正在为每个线程创建连接并在完成线程的任务时关闭。我遇到了他们称为连接池的东西。我不知道,如何将此连接池概念集成到我的应用程序中?我很困惑,从哪里开始,如何开始?

提前致谢

0 投票
0 回答
21 浏览

payara - Payara 5 JDBC pool:监控显示连接的最大值大于最大池大小

对于我们的 JDBC 池,我们配置了最大池大小 128,我可以在管理控制台中看到这个设置。

但是,查看 Payara 为该池提供的监控数据,我们可以看到高水位标记值 (NumConnUsed) 大于 128。

怎么会这样?在另一个线程中,我读到这可能与被池认为已死但仍处于打开状态的悬空连接有关。

是否有一些设置可以调整以避免这种情况?

0 投票
0 回答
32 浏览

mysql - 为什么我的 Tomcat 9 没有像 minIdle 中指定的那样保持 jdbc 连接打开?

我已将 Tomcat 9 配置为使用 server.xml 保留数据库池,以便至少有 50 个连接到我的 mysql 数据库。当 tomcat 启动时,我可以使用 SHOW PROCESSLIST 命令查看那里的所有连接。我不明白为什么几天后我只看到 8 个连接。

这是我的配置。我已经包含了名称随着不同的 tomcat 版本而更改的参数,例如 maxActive 和 maxTotal,以确保采用参数值。

会发生什么?是我的配置不对吗?

我使用 mysql-connector-java-5.1.13 和 OpenJDK 1.8.0_275

0 投票
0 回答
15 浏览

java - Tomcat JDBC 连接池 removeAbandoned 不起作用

我们有一个使用 Tomcat JDBC 连接池的应用程序,它与 Spring Boot 和 Hibernate 一起配置。连接池本身运行良好(我已经能够通过池提供的 JMX MBean 验证),但特定参数似乎不起作用。

根据Tomcat 文档,如果“removeAbandoned”设置为 true,则如果连接的使用时间超过 removeAbandonedTimeout,则该连接被视为已放弃并有资格删除。因此,我将“removeAbandoned”设置为 true,将“removeAbandonedTimeout”设置为 20(秒)。我已经能够使用 JMX MBean 验证这两个参数是否已正确设置。

为了测试放弃的连接是否真的被删除,我手动锁定了我的一个数据库表,并在几个浏览器选项卡上打开了访问此类表的页面。每个人都打开了一个到我的数据库的新连接,因为我能够使用 JMX MBean 和使用show status where `variable_name` = 'Threads_connected';. 但是,在 20 秒过去后,这些连接都没有被删除。我什至等了更长的时间,直到我打开桌子,他们什么也没发生。

根据我从 Tomcat 文档中了解到的情况,这些连接都应该有资格被删除,因为它们都在使用中并且持续时间超过 20 秒。那么这里发生了什么?

我的其他参数是 maxActive="75"、minIdle="5"、maxIdle="5"、initialSize="3"、validationQuery="SELECT 1" 和 testWhileIdle="true"。我应该澄清一下,当表被锁定时,所有这些连接都保持活动状态(没有一个再次空闲,也没有一个从池中删除)。

编辑:更正。实际上,第一个连接正在被删除,而不是后续的连接。当“suspectTimeout”设置为 20 且“removeAbandoned”设置为 false 时,“logAbandoned”正确显示所有可疑连接。