数据库连接池上的try-with资源是否每次都会关闭连接?

问题描述 投票:0回答:1

我正在使用HikariDataSource管理与我的Postgres DB的连接池。

我正在尝试使用一种资源来从HikariDataSource获取连接,我想了解以下内容:

1)每次连接是否真的关闭?

2)如果是,以这种方式使用准备好的语句没有好处吗?

3)在连接池中使用预备语句的最佳实践是什么?

这是我的连接代码:

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
1个回答
0
投票
  1. 否,当调用close()时,连接将返回到池中。包装器将以这种方式覆盖close(),以便池可以工作。
  2. 未关闭。
  3. 就像平时一样。
© www.soinside.com 2019 - 2024. All rights reserved.