Mysql vert.x异步jdbc不';不要关闭连接
我正在用Vert.x实现一个RESTful API。我使用它的异步jdbc客户端,将MySQL和c3p0作为连接池 我的问题是,尽管closeConnection处理程序成功,但实际的数据库连接并没有关闭和重用。池在几秒钟内就满了,结果是:BasicResourcePool:204-acquire test-池已达到最大值。[托管:20;最多:20] })) 知道我错过了什么吗Mysql vert.x异步jdbc不';不要关闭连接,mysql,jdbc,c3p0,vert.x,Mysql,Jdbc,C3p0,Vert.x,我正在用Vert.x实现一个RESTful API。我使用它的异步jdbc客户端,将MySQL和c3p0作为连接池 我的问题是,尽管closeConnection处理程序成功,但实际的数据库连接并没有关闭和重用。池在几秒钟内就满了,结果是:BasicResourcePool:204-acquire test-池已达到最大值。[托管:20;最多:20] })) 知道我错过了什么吗 祝你一切顺利 您的处理程序中可能会遇到一些异常,如果发生这种情况,那么最后一行将不会执行,因此不会调用close并将连
祝你一切顺利 您的处理程序中可能会遇到一些异常,如果发生这种情况,那么最后一行将不会执行,因此不会调用close并将连接返回到池中
您应该使用
try
finally
块包装代码,以确保连接返回池。非常好的主意,Paulo,但事实并非如此。我更新了代码(见上文)。它总是说结束是成功的。尝试用一个try-finally来总结它,结果是一样的:假阳性。在这种情况下,我建议在VertxJDBC客户端上打开一个问题,并添加一个简单的复制器示例,以便对其进行调查。
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!");
}
});
});