如何在 HikariCP 中设置事务超时

问题描述 投票:0回答:2

我正在寻找 jOOQ/HikariCP 连接池中 Spring

setDefaultTimeout
AbstractPlatformTransactionManager
方法的模拟。

我在

loginTimeout
中发现了各种超时,例如
maxLifetime
idleTimeout
HikariDataSource
,但似乎都不符合我的目的。

我也看了jOOQ的

TransactionProvider

经过一些源代码调查后,我在 HikariCP 中发现了以下代码:

         setNetworkTimeout(connection, validationTimeout);

         try (Statement statement = connection.createStatement()) {
            if (isNetworkTimeoutSupported != TRUE) {
               setQueryTimeout(statement, 
                   (int) MILLISECONDS.toSeconds(
                       Math.max(1000L, validationTimeout)));
            }

            statement.execute(config.getConnectionTestQuery());
         }

看到这个,我想我想要的配置是

validationTimeout
。这是正确的吗?

spring jooq hikaricp
2个回答
0
投票

您找到的代码是运行连接验证查询(通常非常快),其中应用了“验证超时”。

最有可能的是,“您的应用程序”中的事务将比为 HikariCP 指定的验证超时时间长得多

目前,您可以为org.jooq.Query设置查询超时,但不能为org.jooq.Routine设置查询超时。请参阅https://github.com/jOOQ/jOOQ/issues/3892


0
投票

如果您引用 AbstractPlatformTransactionManager 我猜测您希望使用在 HikariCP 连接池之上使用 JOOQ 表达查询的事务。

最好的起点可能是 JOOQ 的交易文档在这里

http://www.jooq.org/doc/3.8/manual/sql-execution/transaction-management/

由于您来自 Spring,Spring TX 集成可能是一个很好的起点。

HikariCP 本身不提供超时管理,因为它只专注于管理已形成的连接。因此,您列出的 3 个值做了非常不同的事情

loginTimeout - HikariCP 等待与数据库建立连接(基本上是 JDBC 连接)的时间

maxLifetime - 连接在关闭之前在池中存活的时间

idleTimeout - 未使用的连接在池中存在多长时间

© www.soinside.com 2019 - 2024. All rights reserved.