带有 HikariDataSource 的 jOOQ 连接池发布模式

jOOQ Connection Pool Release Pattern with HikariDataSource

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

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

只是想确保这是正确的,因为如果我不调用 evictConnection

,我的连接就不会被重新循环

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

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

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

除了 的回答,它解释了 close()evictConnection() 相比的语义,我想说你也可以简单地让 jOOQ 包装你的 DataSource 直接:

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

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