Шаблон освобождения пула соединений 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, который заботится о закрытии каждого соединения после каждого запроса.

Другие вопросы по тегам