2016-05-13 48 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 - 未使用的連接在池中存活的時間長度