问题标签 [tomcat-dbcp]

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 回答
3255 浏览

spring - Tomcat dbcp removeAbandoned 问题

有人可以解释一下如何正确使用 removeAbandoned 属性吗?问题是,我们有在事务中运行的服务方法(应用@Transactional)。例如,主体可以是 1000 个选择语句后跟 1000 个插入。removeAbandoned 属性设置为 60 秒。现在,如果 1000 个插入语句的执行时间超过 60 秒,则会为下一个 db 语句抛出异常“连接已关闭”。为什么会发生这种情况以及如何克服这种情况?如果我删除 removeAbandoned 属性,每件事都运行良好。这是我的 dbcp 配置。

通过使用这些属性,我们正在构建一个数据源。如果我在这里做错了什么,请纠正我。我假设在哪里调用此服务,它会打开一个连接并执行 db 语句,但它试图在 removeAbandonedTimeout 之后使用相同的连接?

0 投票
0 回答
42 浏览

java - Tomcat DBCP,批量插入期间的连接关闭问题

我正在使用 Tomcat 连接池连接到数据库。在我的 spring 数据类中,我使用大约 100 000 条记录调用 repository.save(List) 。执行数据库查询一段时间后,该语句失败,说明连接已关闭。我不确定我们需要设置什么属性来解决问题。

我正在使用 oracle 数据库。

0 投票
2 回答
735 浏览

java - 无法使用注释和基于 java 的配置在 Spring MVC 中建立数据库连接

我正在创建一个与 MySQL 数据库建立数据库连接的 Spring MVC 应用程序。我使用了基于 java 的配置。但我不知道为什么DataSoruce会来null

有人可以告诉我哪里做错了吗?

我配置了前端控制器的类。

我必须启用 Spring MVC 功能的类。

创建数据库连接

以及处理用户请求以检查连接是否建立的最终控制器类。

提前致谢 :)

0 投票
1 回答
82 浏览

java - tomcat dbcp _closed PoolableConnection 但处于 ALLOCATED 状态

使用 ojdbc6.jar、tomcat 7、tomcat-dbcp-8.0.3.jar(以及其他可能与此问题无关的 jar)、JDK 7 (u51) 的 java 应用程序

我们已经使用 v$session 报告确定存在连接泄漏,其中某些连接进入 INACTIVE 状态超过 7 小时。在冻结状态下进行的线程转储也证实了这一点。

堆转储(在冻结状态下拍摄)显示:

  1. Total PoolableConnection 和 DefaultPooledObject 等于 maxTotal(预期为耗尽池)
  2. 每个连接都关联到 PooledObjectState ALLOCATED(预期)
  3. lastReturnTime = lastUserTime = lastBorrowedTime(在 DefaultPooledObject 中),这对我来说意味着:THREAD-1(良好的工作流程)返回了由 THREAD-2 立即借用的连接(有泄漏的不良工作流程),而 THREAD-2 从未关闭连接,让它悬空!

上述所有观察都是有道理的,因为我们肯定有连接泄漏和最终耗尽的池 分配池状态

我的问题是:当我看到有关 PoolableConnection 的详细信息时,它具有关联的布尔值 _closed,它是“真”。为什么/怎么会有“_closed = true”。当我反编译 tomcat-dbcp jar 时,我可以看到每次 _close 被标记为 true 时,它​​也会将 IDLE 状态与连接对象相关联(而不是 ALLOCATED)。 _closed PoolableConnection

寻找关于为什么这个布尔值是真的理论。

PS:我们有各种想法(比如设置 logAbandoned)来找到负责连接泄漏的确切代码,我期待找到堆转储的原因(或理论)来捕获这些 PoolableConnection _closed=true 情况。

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 回答
278 浏览

spring - Tomcat 9 w/ Apache DBCP + Spring 5 + Oracle 12c + SqlArrayValue

We have existing SpringMVC J2EE application that runs on Orale WebLogic which we are attempting to migrate to Apache Tomcat. Everything seems to work except we are having issues binding array values through JDBC into the Database. Here is how that was being done successfully on WebLogic.

The statuses variable is a String array and VARCHAR_TABLE_T is an Oracle DB type of the same. SqlArrayValue is a Spring class specifically for Oracle array handling in JDBC.

When the code is executed we get the following error (again, this is only broken on Tomcat).

I found a bunch online about unwrapping the connection to be able to perform vendor specific actions, however it seems that Spring should be doing that for me? I tried setting accessToUnderlyingConnectionAllowed to true in Tomcat's server.xml (something I had found online) where we have the connection resource setup, but that did not affect the behavior.

Here is the resource from server.xml.

0 投票
1 回答
273 浏览

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

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

0 投票
0 回答
109 浏览

http - Apache Commons DBCP - 执行验证查询期间的 I/O 异常

我面临以下异常,

当验证查询运行时发生此异常 -选择 1以从 Apache Commons DBCP 池获取数据库连接。

当应用程序第一次启动上述查询时,没有问题。10 分钟后,我每 10 分钟运行一次调度程序。

每次调度程序运行时,它都会尝试从池中获取连接,因为testOnBorrow=truevalidationQuery="select 1",对象验证就会发生。在验证调用期间,我收到上述错误。之后,后续调用就没有问题了。

如果连接未激活并尝试验证查询,是否会导致问题?

如果我不使用validationQuery,我可能会遇到什么问题吗?

注意

  • 当我将调度程序时间减少到不到 10 分钟时(我尝试了 5 分钟,没有问题),它运行良好。
0 投票
0 回答
25 浏览

aws-secrets-manager - 如何在 dbcp 基本数据源中重新加载密码

dbcp2 基本数据源正用于我们的一个 java 应用程序,并且通过调用此设置器设置数据库密码

密码存储在 AWS 秘密管理器中,现在为数据库构建了密码轮换逻辑,所以现在每当轮换密码时,我的应用程序无法验证数据库,我需要绕过新密码重新部署我的应用程序。

我可以在应用程序中读取最新密码,但在 dbcp 中没有看到任何回调 API 来刷新密码。

DBCP 中是否有任何选项可以在不重新部署应用程序的情况下刷新密码?