如何在HikariCP中设置事务超时

时间:2016-05-13 13:08:00

标签: spring jooq hikaricp

我正在寻找jOOQ / HikariCP连接池中Spring setDefaultTimeout的{​​{1}}方法的模拟。

我在AbstractPlatformTransactionManager中发现了loginTimeoutmaxLifetimeidleTimeout等各种超时,但这些超时似乎都不符合我的目的。

我也看了jOOQ的HikariDataSource

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

TransactionProvider

看看这个,我想我所追求的配置是 setNetworkTimeout(connection, validationTimeout); try (Statement statement = connection.createStatement()) { if (isNetworkTimeoutSupported != TRUE) { setQueryTimeout(statement, (int) MILLISECONDS.toSeconds( Math.max(1000L, validationTimeout))); } statement.execute(config.getConnectionTestQuery()); } 。这是对的吗?

2 个答案:

答案 0 :(得分:0)

您找到的代码是运行连接验证查询(通常非常快),它应用'验证超时'。

最有可能的是,“您的应用”中的交易将比为HikariCP

指定的验证超时花费更长的时间

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

答案 1 :(得分: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 - 池中未使用的连接存在多长时间