java - 泄漏时如何管理 HikariCP 连接?
问题描述
我们有一个 Java Web 应用程序,它在收到请求后立即从 HttpServlet 中的 Hikari 连接池(版本 3.2.0)获取连接,并在返回响应时关闭它。我们设置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 秒),或者我们根本没有得到任何回答。
这(以及 servlet 上的高流量)导致池被填满,因此我们开始收到Connection leak detection
警告,一旦没有更多空闲连接,SQLTransientConnectionException
就会抛出以下消息:Connection is not available, request timed out after 30000ms
.
这是 Hikari 的预期行为,完全没问题。
我的问题是:我们该如何处理这种情况?除了拦截泄漏的连接并关闭它们之外,还有其他解决方案吗?
解决方案
推荐阅读
- php - 在结帐中添加自定义字段并将其显示在 WooCommerce 管理订单页面中
- linux - linux中后台进程和守护进程之间的区别
- javascript - Webpack 文件加载器和 Svelte 样式的背景图像不起作用
- java - getPropertyMsg 中的空指针异常?
- python - 如何使用 pyignite 从表中删除条目?
- android - "
在使用 Google Play 服务时遇到问题。请再试一次”,同时使用 Google NearBy Messages API - android - 当前在 Flutter 中使用 List 进行扩展或 flex 滚动的方法
- python - 如何指示python等待作业运行,直到变量取特定值
- javascript - 在 GET 表单提交中解释瑞典语字母(å、ä、ö)
- r - 是否有一行代码可以添加到函数中以删除 = 0 的所有结果