问题标签 [tomcat-jdbc]

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

java - 如何防止validationQueryTimeout影响H2中的其他SQL语句

我正在使用支持 H2 1.4.199 数据库的 Dropwizard 1.3.12。在我的数据库配置中

我遇到的问题是 3s 的超时也会传播到 Dropwizard 应用程序中完成的真实数据库查询。一些数据库查询被此超时中断。我宁愿让他们再等一会儿。

据我了解validationQueryTimeout,应该只控制validationQuery. 应用程序内部完成的真实数据库请求不应受此影响。我已经尝试删除validationQueryTimeout,这似乎可以解决问题并删除查询超时。这样做我认为是最后的解决方法,因为我认为在从连接池中获取连接时验证连接是否已启动并正在运行的查询超时是有意义的。

我尝试使用 Postgresql,validationQueryTimeout似乎并没有影响其他数据库查询。

我做了一些调试,认为我找到了原因,但我缺乏一个好的解决方法。

在进行验证时,tomcat-jdbc 在验证语句上设置查询超时。 https://github.com/apache/tomcat/blob/9.0.16/modules/jdbc-pool/src/main/java/org/apache/tomcat/jdbc/pool/PooledConnection.java#L536-L544

这里最大的问题是 H2 将超时保持在连接级别而不是语句级别。https://github.com/h2database/h2database/blob/version-1.4.199/h2/src/main/org/h2/jdbc/JdbcStatement.java#L695-L717

有什么我可以做的吗?或者是否需要在 h2 或 tomcat-jdbc 中进行修复?我能想到的是在为验证查询设置它之前在 tomcat-jdbc 中获取当前查询超时值,然后在运行验证查询后将其设置回该值。

0 投票
3 回答
584 浏览

spring-boot - 使用 X-Ray 和 Spring Boot 2 跟踪 SQL 查询

当前的 X-Ray SQL 跟踪拦截器使用 Tomcat JDBC 池,但 Spring Boot 2 使用 HikariCP 作为默认池,是否可以在 HikariCP 中配置 jdbc 跟踪?

在这里(https://forums.aws.amazon.com/thread.jspa?threadID=254847)他们建议使用这两个数据源:

但如果我在类路径中有 HikariCP 库,spring 会将其配置为数据源。

我尝试过使用 DatasourceBuilder 并使用参数强制类型spring.datasource.type

有什么提示吗?

0 投票
0 回答
285 浏览

spring-boot - 如何在 Spring Boot 2 中将“spring.datasource.tomcat”属性绑定到 javax.sql.DataSource 类

我有一些代码可以在版本 2 之前的 spring boot 上正常工作,但我发现很难将其转换为 spring boot 2。

有人可以帮忙吗?

.yml 文件:

旧代码:

版本 2 的新代码:

将数据绑定到 DataSource.class 时出现以下错误。当我将数据源替换为 poolProperties 类时,它将能够绑定但我无法绑定此数据源。
Binder.get(环境) .bind("spring.datasource.tomcat", PoolProperties.class).get();:

错误:

0 投票
1 回答
273 浏览

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

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

0 投票
1 回答
861 浏览

spring - Spring Boot - 如何检查连接池中的活动连接数

我正在使用配置了多个数据源的 Spring Boot 1.5.17。我的数据源之一配置如下。

现在如何获取或记录此数据源的连接池中的活动连接数?

0 投票
0 回答
117 浏览

java - Spring Tomcat JDBC 连接池 - 如何在数据库脱机时恢复

我正在使用带有 MSSQL 的 Spring Boot 构建应用程序。对于连接池,我使用的是 Tomcat JDBC。

我的问题是当数据库离线几分钟后连接池会发生什么,以及从该数据库离线恢复的最佳方法是什么。

我尝试了以下 tomcat 连接池配置,当数据库脱机然后联机时,未建立新连接。我不断得到例外com.microsoft.sqlserver.jdbc.SQLServerException: The connection is closed.

Tomcat JDBC 配置:

请注意,我配置了两个数据源

0 投票
0 回答
200 浏览

java - 了解密码更改时的 tomcat-jdbc 池行为

在以下代码中(根据 tomcat-jdbc 站点中给出的示例代码进行更改),我首先使用正确的用户名和密码创建连接池。一段时间后,我将用户名和密码更改为错误的,但仍然连接成功。我已经设置了testOnBorrowtrue发出连接时应该测试连接的位置。有人可以解释为什么代码在发出连接时不检查密码吗?

我的代码

0 投票
2 回答
526 浏览

mysql - Tomcat 8.5 连接池在数据库故障转移后未重新连接

我有一个使用 Tomcat 8.5 连接池、Java 8 和多可用区 AWS RDS MySQL 数据库的应用程序。在过去几年中,我们遇到了几个导致故障转移的数据库问题。发生故障转移时,池始终能够检测到连接已关闭(连接关闭后不允许任何操作),并在一分钟后在备份节点启动时重新正确连接。

几天前,我们有一个不遵循此规则的故障转移。由于硬件数据库问题,数据库不可用并且发生了故障转移。然后,几分钟后备份节点启动时,我们可以从桌面 MySQL 客户端正确连接到数据库。

即使在故障转移发生并恢复与数据库的连接后几分钟,应用程序仍会显示数百个异常日志,例如:

在我们重新启动 Tomcat 服务器之前,应用程序无法重新连接。

我们的池是这样配置的:

JDBC 连接 URL 有以下参数:

autoreconnect=true&socketTimeout=20000

根据我的理解,validationQuery应该已经失败并且连接被丢弃,所以应该创建一个新的正确连接。此外,根据maxAge10 分钟后,所有连接都应该被丢弃并创建新连接。

即使在 20 分钟后,游泳池也无法恢复。如前所述,我们必须重新启动 Tomcat 服务器。

有什么解释为什么池总是从故障转移中正确恢复,但在这种情况下,它不能?

0 投票
1 回答
320 浏览

jdbc - 限制jdbc连接池固定数量

嗨,我将 micronaut 数据与各种 jdbc 连接池一起使用。我第一次有 hikari,还尝试了 tomcat。

我假设将数据源设置为maximum-pool-size: 10最多打开 10 个连接。但似乎有很多打开和关闭的过程。再加上同时有很多请求,它使用的连接远不止 10 个。问题是,天蓝色的 postgresql 总共只允许 100 个连接。

目前我已经运行 7 个应用程序访问该数据库。我希望最多总共有 70 个连接。但实际上它更多。

我也尝试使用 tomcat jdbc 池,他的行为有点不同。而且还使用了10多个连接。我还使用 java profiler 进行了检查,发现有时每秒最多 100 个打开/关闭连接事件。

任何建议如何在这种情况下采取行动,除了使用第二个数据库。我希望池能缓冲调用,特别是因为它们来自 kafka 主题。但是,好吧,似乎有所不同。

--- 编辑添加光日志

这是hikari的日志输出

0 投票
0 回答
145 浏览

java - Tomcat数据库连接池高吞吐速度慢

我有用 Spring 2.X 编写的肥皂网络服务,它连接到 Teradata并将结果返回给客户端。为了连接数据,我使用Tomcat JDBC 连接池作为DataSource.

在高峰时段(上午 9 点到下午 6 点)应用程序会收到大约 6 万个事务请求。我观察到一些交易处于挂起状态并在 2-3 分钟内返回响应。我怀疑某些事务处于等待状态,一旦池中的连接可用,则完成事务。

以下是DataSource.

以下是我的问题:

  • 根据我为我的应用程序提到的负载,上述配置是否有任何问题?
  • 有什么方法可以监控数据库连接池的使用吗?