我正在寻找jOOQ / HikariCP连接池中Spring setDefaultTimeout
的{{1}}方法的模拟。
我在AbstractPlatformTransactionManager
中发现了loginTimeout
,maxLifetime
和idleTimeout
等各种超时,但这些超时似乎都不符合我的目的。
我也看了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());
}
。这是对的吗?
答案 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 - 池中未使用的连接存在多长时间