Шаблон освобождения пула соединений jOOQ с HikariDataSource
Это правильный способ освободить соединение обратно в пул
HikariDataSource ds = ...;
final Connection sqlConn = ds.getConnection();
final DSLContext ctx = DSL.using(sqlConn, SQLDialect.DERBY);
// DO JOOQ QUERIES HERE
ds.evictConnection(sqlConn);
Просто хочу убедиться, что это правильно, так как мои соединения не будут повторно зациклены, если я не вызову evictConnection
2 ответа
Нет, просто звоню sqlConn.close()
освободит соединение обратно в пул.
Когда HikariCP или любой другой пул возвращает вам соединение с getConnection()
то, что он на самом деле возвращает, является прокси-объектом, который перехватывает close()
call и возвращает соединение с пулом вместо того, чтобы фактически закрывать его.
evictConnection()
это метод, который редко используется. Это метод принудительного закрытия соединения с базой данных и удаления соединения из пула.
В дополнение к ответу Бретту, который объясняет семантику close()
по сравнению с evictConnection()
Я бы сказал, что вы также можете просто позволить JOOQ обернуть DataSource
непосредственно:
HikariDataSource ds = ...;
final DSLContext ctx = DSL.using(ds, SQLDialect.DERBY);
// DO JOOQ QUERIES HERE
JOOQ будет использовать DataSourceConnectionProvider
, который заботится о закрытии каждого соединения после каждого запроса.