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

connection-pooling - Tomcat JDBC 池 - timeBetweenEvictionRunsMillis 为 -1

Tomcat 8 JDBC连接池的timeBetweenEvictionRunsMillis设置为-1会发生什么?

tomcat wiki说它不应该少于1秒:

timeBetweenEvictionRunsMillis - (int) 空闲连接验证/清理线程运行之间休眠的毫秒数。此值不应设置在 1 秒以下。它决定了我们检查空闲连接、放弃连接的频率,以及验证空闲连接的频率。默认值为 5000(5 秒)。

0 投票
1 回答
800 浏览

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

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

0 投票
1 回答
82 浏览

jdbc - PostgreSQL JDBC ResultSet 在单表扫描中具有 4 倍的预期行数

我正在运行带有 PostgreSQL 10.2 数据库的 Tomcat 9.0,使用配置了 org.postgresql.Driver 的 Tomcat JDBC 池。

我有以下简单查询,它扫描一个小的参考表以获取值:

该表正好有 3 行,而 pgAdmin 查询工具返回相同的 3 行,而不管使用的是 DISTINCT 关键字。

我在以下代码中使用 SQL 将值添加到列表中(在我使用 putIfAbsent 和地图来绕过错误之前,目前不使用排名列)。

我正在查看列表的 JSON 输出以及打印的消息。虽然表格有 3 行,但我可以看到 12 个条目。它们按 3 个不明确的组排序,就好像查询按顺序重复了 4 次,返回到同一个 ResultSet。

知道是什么原因造成的以及如何解决吗?我的 JDBC 代码有问题吗?

0 投票
1 回答
2371 浏览

java - tomcat jdbc 池在连接重用方面有一些不同的行为

我已经在我的 Web 应用程序中配置了 Tomcat JDBC 池,并添加了 8.0.38 版本的 maven 依赖项,这也是我的 tomcat 版本。现在我从该池中获取连接并检查 autoCommit 属性的值,它是“true”,然后我将该连接的 autoCommit 设置为“false”。然后我提交事务,然后关闭该连接。现在我从池中获得另一个连接并检查 autoCommit 属性的值,它是“假的”。但我期待它是真的。我也使用 Apache Common DBCP2 pooling library,它没有这种行为。每当我从公共 DBCP2 池获得连接时,它都会返回 autoCommit 设置为“true”的连接。我已经测试并看到了 tomcat jdbc 池的这种行为。

上面代码的输出是

假con1
假con2

在这里将 defaultAutoCommit 设置为“true”甚至对我不起作用。它总是返回 autoCoomit false 的连接。

所以我想知道常见的 DBCP2 如何管理这个以及如何在 tomcat JDBC 池中实现这个?

0 投票
1 回答
354 浏览

sqlexception - Grails 3.3.3 战争部署在 Tomcat 8.5 上,关闭 jdbc 连接问题

当我在容器中运行war文件时,它显示为服务器端的连接断开(默认空闲超时为8h)导致异常(根本原因:连接已经关闭/最后一个成功的包发送到服务器要么0ms ago 或表示 >8h 的值。这些异常在重新启动容器之前无法恢复。

问题 1)当在 build.grade 运行时“org.apache.tomcat:tomcat-jdbc”中添加 jdbc-tomcat 池作为依赖项时,不会尝试重新连接到断开连接的“除主”数据源(低于数据源)。不管这些属性如何: dataSource: pooled: true jmxExport: true driverClassName: com.mysql.jdbc.Driver
dialect: org.hibernate.dialect.MySQL5InnoDBDialect properties: initialSize: 2 # 连接池大小 maxActive: 10 minIdle: 0 maxIdle: 10 removeAbandonedTimeout: 120 # 石英作业使用的空闲连接 removeAbandoned: true validationQuery: SELECT 1 testOnBorrow: true maxWait: 10000 maxAge: 600000 timeBetweenEvictionRunsMillis: 5000 minEvictableIdleTimeMillis: 60000 validationQueryTimeout: 3 validationInterval: 15000 testWhileIdle: true testOnReturn: false jdbcInterceptors: ConnectionState defaultTransactionIsolation: java.sql.Connection.TRANSACTION_READ_COMMITTED "other" DS 在 grails/tomcat 组合中完全支持池化.

因此,我从 gradle 中删除了 tomcat-jdbc,并在每个 url 之后放置 ?autoReconnect=true。不过,某些属性会产生影响。properties: initialSize: 2 # 连接池大小 maxActive: 20 minIdle: 2 maxIdle: 20 以上值导致,在使用 20 次连接(顺序,非并行)的闭包内 20 次调用后,第 21 次失败。在整个过程中,观察 mariadb 端的打开连接有零个或一个并发 conns。删除它工作的属性后。为什么未加载 conn 池时此值会影响?

Tomcat 带有自己的 tomcat-jdbc jar,这可能会有所作为。是否需要在 build.grade 中将类型更改为“提供”,就像 tomcat 本身一样?

问题 2) 是网络调查结果,即也在这个论坛中,而且 grails 文档本身也指向https://grails.org/deployment。doc 在部署到那里记录的容器时提到了警告......但是当我注册时,我没有收到确认电子邮件并且页面转发到https://grails.org/unauthorized。在我看来,注册好像被破坏了。是否有电子邮件联系方式 - 找不到。

我简直不敢相信这需要我这么长时间才能在 Web 容器中拥有一个普通的池。在旧容器版本中也可以正常工作

0 投票
0 回答
640 浏览

sockets - 公开 JPA 事务需要太多时间

我使用 SpringBoot 1.5.10.RELEASE,Postgre Server 9.6,驱动程序版本是 9.4.1212.jre7,tomcat-jdbc(spring bom 版本)。

这是配置 JPA :

  • spring.datasource.driver-class-name=org.postgresql.Driver
  • spring.jpa.hibernate.ddl-auto=none
  • spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect

Java代码是:

AssureMaladieController.java

AssureMaladieService.java

ReglementRepository.java

有时,JPA 从一等到二等需要几分钟

在异常情况下,日志是:

超过15分钟!

在正常情况下,日志是:

Visual VM 确认线程在 CPU 中需要 15 分钟(945160 ~ 15m45s)

CPU时间

更多参与的行是由 socket read 上的驱动程序:

套接字读取

这篇文章似乎与同样的问题有关:https ://github.com/brettwooldridge/HikariCP/issues/603

我们正在尝试这个:

  • 从 tomcat-jdbc 切换到 hikari 3.2.0(似乎从 2.6.2 开始对此进行了修复)
  • 将 jdbc PG 驱动程序从 9.4 更新到 42.2.5

(升级到 spring 2.0 会更容易,但我们面临另一个迁移问题)

0 投票
1 回答
3578 浏览

java - mysql-connector-java-8.0.12:“马来半岛标准时间”服务器时区出现错误

我们最近将 MySQL 从 5.6 升级到 8。因此,根据升级说明, 在数据库 url 中使用mysql-java-connector(8.0.12)和新的驱动程序类名称,即com.mysql.cj.jdbc.Driver 。但仅在这个时区“马来半岛标准时间”出现以下错误

马来半岛标准时间'无法识别或代表多个时区。如果要使用时区支持,则必须配置服务器或 JDBC 驱动程序(通过 serverTimezone 配置属性)以使用更具体的时区值。在 com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)

使用以下配置在 tomcat context.xml 中创建连接

另外,尝试使用如下的 serverTimezone 参数,但没有运气。

0 投票
0 回答
327 浏览

java - 如何检测和回滚被遗忘的程序事务

我正在开发一个基于 spring (spring-boot 1.5.13.RELEASE) 连接到 MySQL 8 数据库的 Web 应用程序。我们选择使用 tomcat jdbc 池(spring-boot 的默认池)。生产部门要求我们制定一个解决方案,以避免使用rollback-on-return属性的不完整交易(我们也设置auto-commit=false了)。

我们不能只使用面向注释的事务。我们必须以编程方式管理其中一些。所以我们认为使用rollback-on-return会避免“挂起”的交易。不幸的是,在测试阶段,我们发现如果一个请求创建了一个“待处理”事务,那么请求的结束并不会随着连接的返回而结束。因此,没有回滚!

我已经测试了连接是否在正常情况下关闭,因此是这样。

这是我的示例代码:

我找到了一个 JdbcInterceptor 来记录借用和连接的返回:

这是相关的日志部分:

我的问题是:

  • 有没有办法确保挂起的事务总是像我们预期的那样完成返回时回滚?
  • 在这种情况下,我们可以检测并返回“未返回”的连接吗?
  • 在这种情况下存在这样的财产并且没有管理似乎很奇怪?为什么我们要在我们已经提交或回滚的事务之后使用回滚?有什么我不明白的(确定是 :p )?

注意:请不要介意错误日志级别,我有点色盲。

编辑: 我尝试通过一个拦截器来检测当前活动的事务,使用TransactionSynchronizationManager.isActualTransactionActive(). 这样,我找到了未完成的,但是当我试图用TransactionAspectSupport.currentTransactionStatus()它来获得它时,我回来了null???看不懂...

简化

有没有办法检测和回滚被遗忘的程序化事务(如下面的代码所示)?

0 投票
0 回答
839 浏览

java - 连接未释放回 tomcat jdbc 池

我有一个基于 grails2 的应用程序,它正在使用 tomcat jdbc 池,最近我遇到了池中所有连接都用完的问题,我开始得到:-

我有一些需要大量连接的查询和一些执行大约 2-3 分钟的存储过程,因为我手动从数据源 bean 获取连接:-

我已经在标准输出中记录了总的活动连接,我看到没有。活动连接的数量不断上升,并且永远不会下降,然后达到 100,这是允许的总活动连接,然后我开始遇到 poolexhaustauion 问题,谁能给我一个想法,我可能缺少什么或连接在哪里可能会泄漏。这是我的连接详细信息:-

0 投票
1 回答
545 浏览

tomcat - 了解具有 JMX 相关属性的连接池

我正在为我的 jdbc 数据源相关属性分析 JMX mbean (org.apache.tomcat.jdbc.pool.jmx.ConnectionPool) 属性,我需要一些关于这些属性含义的参考。我找不到任何关于这些方法给出的文档。我检查了https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/jmx/ConnectionPool.html#getActive()并找不到任何信息。

这些是否与https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html中提到的 Tomcat JDBC 连接池属性有任何联系?Active Idle 和 Size 之间的关系是什么(看起来像 Active + Idle = Size)。

非常感谢