vert.x async jdbc没有关闭连接

时间:2016-05-28 21:26:04

标签: mysql jdbc c3p0 vert.x

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

我的问题是虽然closeConnection处理程序成功,但实际的数据库连接并未关闭并重用。池会在几秒钟内完成,从而导致: BasicResourcePool:204 - 获取测试池已经达到最大值。 [管理:20;最大:20]

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!");
        }
    });
});

});

知道我错过了什么吗?

一切顺利!

1 个答案:

答案 0 :(得分:2)

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

您应该使用return util.filterUsers(...); try块来包装代码,以保证连接返回到池中。