【发布时间】:2026-02-03 14:40:01
【问题描述】:
是的,经过多年的设计分析和思考同样的问题.. 我知道这是设计问题。正如评论员所说。给 Hikari 提供数千个连接并不意味着数据库将处理数千个连接请求。 因此必须将设计更新为最佳数据库连接,并且线程必须等待下一个可用连接。如果您的线程没有及时完成并且仍然在几分钟,几小时内工作..那么您正在做什么以提供与其他线程的数千个连接。这是错误的!完全错误! 给数千个线程连接并不意味着一切都已解决。如果您认为我们有出色的表现:) 那是失败的成功。
我有线程系统。 7000个线程处理一些复杂的任务。
我们有 java 解决方案:spring、hibernate 用于持久性、log4j2、hikari 连接池用于 db 访问(它使用 bean 加载和管理)
我之前将 Hikari 连接池大小设置为线程大小的 %30。但我们得到了这个 连接不可用,请求在 30025 毫秒后超时... 错误。在此错误之后,我无法修复服务停止。我尝试将数据库池大小增加到 8000。
所以线程大小是:7000,数据库池大小是:8000..
但我得到这个错误出乎意料。发生了什么?有人可以解释为什么 db 连接不支持此服务吗?
我读到大多数用户使用最小化池大小(例如 20.000 线程但只有 20 db 池大小)运行他们的服务。怎么可能做到?你能解释一下,我的服务设计问题是什么。
是的,我有@Transactional 注释,并且在复杂任务中的许多功能上都需要新功能。那里有问题吗?重点是这个?
你能帮我找出主要问题是什么吗?
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC
Connection at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:431)
Caused by: org.hibernate.exception.JDBCConnectionException: Unable to acquire JDBC Connection
Caused by: java.sql.SQLTransientConnectionException: springHikariCP - Connection is not available, request timed out after 30025ms.
Caused by: java.sql.SQLException: Network error IOException: Address already in use: connect
Caused by: java.net.BindException: Address already in use: connect
【问题讨论】:
-
a) 您是否
close()连接并在完成后将其返回到池中? b) 此堆栈跟踪显示 BindException。我不确定这在客户端是怎么发生的,你的 tcp 端口用完了吗?
标签: java spring hibernate transactions hikaricp