这是将连接释放回池的正确方法吗
HikariDataSource ds = ...;
final Connection sqlConn = ds.getConnection();
final DSLContext ctx = DSL.using(sqlConn, SQLDialect.DERBY);
// DO JOOQ QUERIES HERE
ds.evictConnection(sqlConn);
我想确保这一点正确,因为如果我不调用evictConnection,我的连接就不会重新循环
答案 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()
是一种很少使用的方法。这是一种强制关闭与数据库的连接并逐出池连接的方法。