vert.x async jdbc не закрывает соединения

Я реализую RESTful API с Vert.x. Я использовал его асинхронный клиент 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!");
        }
    });
});

});

Есть идеи, что мне не хватает?

Всего наилучшего!


person user3159152    schedule 28.05.2016    source источник


Ответы (1)


Вероятно, вы столкнулись с каким-то исключением в вашем обработчике, если такое произойдет, то последняя строка не будет выполнена, поэтому закрытие не вызывается и соединение возвращается в пул.

Вы должны заключить свой код в блок try finally, чтобы гарантировать, что соединение будет возвращено в пул.

person Paulo Lopes    schedule 30.05.2016
comment
Очень хорошая идея, Пауло, но это не так. Я обновил код (см. Выше). Всегда говорится, что закрытие было успешным. Пытался завершить попытку - наконец, результат тот же: ложное срабатывание. - person user3159152; 30.05.2016
comment
В этом случае я бы предложил открыть проблему в vertx-jdbc-client и добавить простой пример воспроизводящего устройства, чтобы его можно было исследовать. - person Paulo Lopes; 31.05.2016