带有 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
,它负责在每次查询后关闭每个连接。
这是将连接释放回池的正确方法吗
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
,它负责在每次查询后关闭每个连接。