Как управлять соединениями HikariCP при их утечке? - PullRequest
0 голосов
/ 29 января 2019

У нас есть веб-приложение на Java, которое получает соединение из пула соединений Hikari (версия 3.2.0) в HttpServlet, как только оно получает запрос и закрывает его при возврате ответа.Мы устанавливаем leakDetectionThreshold и connectionTimeout, чтобы мы могли идентифицировать утечки соединений.

В "псевдокод" это выглядит так:

public class MyServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) {
        try {
            Connection connection = dataSource.getConnection();
            String htmlResponse = doStuff(request, connection);
            response.write(htmlResponse);
        } catch (Exception exception) {
            //handle exception
        } finally {
            connection.close();
        }
    }

    private String doStuff(HttpServletRequest request, Connection connection) {
        //...
    }

}

В doStuff мы вызываем внешнюю службу для получения некоторых данных, и иногда требуется много времени для ответа (> 30 секунд), или мы вообще не получаем ответа.

Это (и высокий трафик на сервлете)вызывает заполнение пула, и поэтому мы начинаем получать предупреждение Connection leak detection, и когда больше нет свободных соединений, SQLTransientConnectionException выдается с таким сообщением: Connection is not available, request timed out after 30000ms.

Это ожидаемая форма поведенияХикари, и все в порядке.

Мой вопрос: как мы можем справиться с этой ситуацией?Существуют ли другие решения, кроме как перехватить просочившиеся соединения и закрыть их?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...