【发布时间】:2020-03-23 22:26:05
【问题描述】:
我正在使用 HikariDataSource 来管理我的 Postgres DB 的连接池。
我正在使用资源尝试从 HikariDataSource 获取连接,我想了解以下内容:
连接真的每次都关闭吗?
如果是 - 以这种方式使用准备好的语句没有优点吗?
在连接池中使用准备好的语句的最佳做法是什么?
这是我的连接代码:
public <T> CompletableFuture<T> withConnection(FunctionThatThrowsChecedException<Connection, T> action) {
return CompletableFuture.supplyAsync(() -> {
try (Connection connection = ds.getConnection()) {
return action.apply(connection);
} catch (SQLException | IOException e) {
throw new RuntimeException("error while getting collection", e);
}
}, workerThreads);
}
这里有一些使用准备好的语句执行查询的示例:
public CompletableFuture<Integer> delete(String batchId) {
return postgresProvider.withConnection(connection -> {
PreparedStatement ps = connection.prepareStatement(DELETE_QUERY);
ps.setString(1, batchId);
return ps.executeUpdate();
});
}
【问题讨论】:
标签: java postgresql prepared-statement connection-pooling try-with-resources