0

我使用的是quarkus框架,集成了hibernate reactive,使用panache list方式进行查询。我发现它不使用连接池,而是直接使用连接。因此,在连接关闭后无法使用查询。

SqlClientConnection


public CompletionStage<RowSet<Row>> preparedQuery(String sql, Tuple parameters) {
        feedback(sql);
        String processedSql = usePostgresStyleParameters ? Parameters.process( sql, parameters.size() ) : sql;
        return Handlers.toCompletionStage(
                        handler -> client().preparedQuery( processedSql ).execute( parameters, handler )
        );
}

PanacheQueryImpl

  @Override
    public <T extends Entity> Uni<List<T>> list() {
        return delegate.list();
    }


我想知道查询时如何使用池?

4

1 回答 1

1

从技术上讲,它不需要传统的连接池,因为所有操作都是非阻塞的,因此您可以通过与数据库的单个连接轻松地使 CPU 完全饱和。

在实践中,默认设置是为每个 Vert.x 上下文使用单个连接,默认情况下,每个 CPU 将有两个这样的上下文。

当您说“连接关闭后无法使用查询”时,我怀疑您实际上遇到了我们最近修复的错误;请在新问题中添加更多详细信息;我怀疑您的问题的解决方案(在这种情况下)是您需要从非阻塞上下文中使用 Panache Reactive,例如为您的端点使用 RESTEasy Reactive。

于 2021-01-07T15:18:21.190 回答