Mysql vert.x异步jdbc不';不要关闭连接

Mysql vert.x异步jdbc不';不要关闭连接,mysql,jdbc,c3p0,vert.x,Mysql,Jdbc,C3p0,Vert.x,我正在用Vert.x实现一个RESTful API。我使用它的异步jdbc客户端,将MySQL和c3p0作为连接池 我的问题是,尽管closeConnection处理程序成功,但实际的数据库连接并没有关闭和重用。池在几秒钟内就满了,结果是:BasicResourcePool:204-acquire test-池已达到最大值。[托管:20;最多:20] })) 知道我错过了什么吗 祝你一切顺利 您的处理程序中可能会遇到一些异常,如果发生这种情况,那么最后一行将不会执行,因此不会调用close并将连

我正在用Vert.x实现一个RESTful API。我使用它的异步jdbc客户端,将MySQL和c3p0作为连接池

我的问题是,尽管closeConnection处理程序成功,但实际的数据库连接并没有关闭和重用。池在几秒钟内就满了,结果是:BasicResourcePool:204-acquire test-池已达到最大值。[托管:20;最多:20]

}))

知道我错过了什么吗


祝你一切顺利

您的处理程序中可能会遇到一些异常,如果发生这种情况,那么最后一行将不会执行,因此不会调用close并将连接返回到池中


您应该使用
try
finally
块包装代码,以确保连接返回池。

非常好的主意,Paulo,但事实并非如此。我更新了代码(见上文)。它总是说结束是成功的。尝试用一个try-finally来总结它,结果是一样的:假阳性。在这种情况下,我建议在VertxJDBC客户端上打开一个问题,并添加一个简单的复制器示例,以便对其进行调查。
client.getConnection(connectionAsyncResult -> {
SQLConnection connection = connectionAsyncResult.result();
connection.queryWithParams("SELECT * FROM AIRPORTS WHERE ID = ?", new JsonArray().add(id), select -> {
    ResultSet resultSet = select.result();
    Airport $airport = resultSet.getRows()
            .stream()
            .map(Airport::new)
            .findFirst()
            .get();

    asyncResultHandler.handle(Future.succeededFuture($airport));
    connection.close(closeHandler -> {
        if (closeHandler.succeeded()) {
            LOG.debug("Database Connection closed");
        }
        else if (closeHandler.failed()) {
            LOG.error("Database Connection failed to close!");
        }
    });
});