From baebed7ebce7b35f53374e42236a22d7a36d5204 Mon Sep 17 00:00:00 2001 From: okou19900722 Date: Thu, 6 Jun 2019 17:12:21 +0800 Subject: [PATCH] close the connection after the execution --- .../ext/asyncsql/impl/AsyncSQLClientImpl.java | 8 +++++++- .../io/vertx/ext/asyncsql/MySQLClientTest.java | 17 +++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/AsyncSQLClientImpl.java b/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/AsyncSQLClientImpl.java index 6efe4e58..6b14fc22 100644 --- a/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/AsyncSQLClientImpl.java +++ b/vertx-mysql-postgresql-client-jasync/src/main/java/io/vertx/ext/asyncsql/impl/AsyncSQLClientImpl.java @@ -118,7 +118,13 @@ private void executeDirect(Function> action, Handle } catch (Throwable e) { future = Future.failedFuture(e); } - future.setHandler(handler); + future.setHandler(asyncResult -> conn.close(close -> { + if (close.failed()) { + handler.handle(Future.failedFuture(close.cause())); + } else { + handler.handle(asyncResult); + } + })); } }); } diff --git a/vertx-mysql-postgresql-client-jasync/src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java b/vertx-mysql-postgresql-client-jasync/src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java index 03c1438c..a47429d1 100644 --- a/vertx-mysql-postgresql-client-jasync/src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java +++ b/vertx-mysql-postgresql-client-jasync/src/test/java/io/vertx/ext/asyncsql/MySQLClientTest.java @@ -18,6 +18,7 @@ import com.github.jasync.sql.db.exceptions.InsufficientParametersException; import io.vertx.ext.asyncsql.category.NeedsDocker; +import io.vertx.ext.sql.SQLClient; import org.junit.*; import io.vertx.core.AsyncResult; @@ -129,6 +130,22 @@ public void test(TestContext context){ }); } + public void testCloseAfterClientExecute(TestContext context){ + Async async = context.async(); + SQLClient mysqlClient = MySQLClient.createNonShared(vertx, new JsonObject() + .put("host", mysql.getContainerIpAddress()) + .put("port", mysql.getMappedPort(3306)) + .put("database", MYSQL_DATABASE) + .put("username", MYSQL_USERNAME) + .put("password", MYSQL_PASSWORD) + .put("maxPoolSize", 1));// one connection for two execution + mysqlClient.query("select 1;", r -> { + mysqlClient.query("select 1;", r2 -> { + async.complete(); + }); + }); + } + @Override protected void compareInstantStrings(TestContext context, String result, String expected) { // mysql will perform some rounding since it does not have the precision to store the full TS