2016-05-13 22 views
1

我正在寻找jOOQ/HikariCP连接池中Spring的AbstractPlatformTransactionManagersetDefaultTimeout方法的模拟。如何在HikariCP中设置事务超时

我发现像loginTimeout,maxLifetimeidleTimeoutHikariDataSource等各种超时,但它们都不符合我的目的。

我也看着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。它是否正确?

回答

0

您找到的代码是运行连接验证查询(通常很快),它正在应用“验证超时”。

最大的可能是,在“你的应用”交易将需要更长的时间比HikariCP

目前指定验证超时,可以设置查询超时为org.jooq.Query而不是org.jooq.Routine 。请参阅https://github.com/jOOQ/jOOQ/issues/3892

0

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

最好的地方,开始也许这里

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

JOOQ的交易文件如你是从春天,春天TX整合也许一个很好的起点来了。

HikariCP本身并不提供超时管理,因为它专注于管理它所形成的连接。这样的3个值,你已经上市做完全不同的事情

loginTimeout - HikariCP多久会等待连接所形成的数据库(基本上是一个JDBC连接)

maxLifetime - 将一个连接活多久在关闭之前的池中

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