使用HikariDataSource的jOOQ连接池发布模式

时间:2015-07-08 04:35:25

标签: jooq hikaricp

这是将连接释放回池的正确方法吗

HikariDataSource ds = ...;
final Connection sqlConn = ds.getConnection();
final DSLContext ctx = DSL.using(sqlConn, SQLDialect.DERBY);
  // DO JOOQ QUERIES HERE       
ds.evictConnection(sqlConn);

我想确保这一点正确,因为如果我不调用evictConnection,我的连接就不会重新循环

2 个答案:

答案 0 :(得分:3)

除了brettw's的答案,它解释了close()evictConnection()相比的语义,我还说你也可以简单地让jOOQ包裹你的DataSource直接:

HikariDataSource ds = ...;
final DSLContext ctx = DSL.using(ds, SQLDialect.DERBY);
  // DO JOOQ QUERIES HERE       

jOOQ将在内部使用DataSourceConnectionProvider,它负责在每次查询后关闭每个连接。

答案 1 :(得分:2)

不,只需调用sqlConn.close()即可将连接释放回池中。

当HikariCP或任何池从getConnection()返回连接时,它实际返回的是一个代理对象,它拦截close()调用并返回到池的连接而不是实际关闭它

evictConnection()是一种很少使用的方法。这是一种强制关闭与数据库的连接并逐出池连接的方法。