HikariCP连接泄漏时如何管理?

时间:2019-01-29 16:43:43

标签: java servlets database-connection connection-pooling hikaricp

我们有一个Java Web应用程序,它在收到请求后立即从HttpServlet中的Hikari连接池(版本3.2.0)获取连接,并在返回响应时将其关闭。 我们设置了leakDetectionThresholdconnectionTimeout,以便我们确定泄漏的连接。

“伪代码” 中,它看起来像这样:

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秒),或者根本无法回答。

此操作(以及servlet上的高流量)导致池已满,因此我们开始收到Connection leak detection警告,一旦没有更多的空闲连接,该消息就会抛出SQLTransientConnectionExceptionConnection is not available, request timed out after 30000ms

这是Hikari的预期行为,完全可以。

我的问题是:如何处理这种情况?除了截获泄漏的连接并关闭它们之外,还有其他解决方案吗?

0 个答案:

没有答案