2016-05-28 10 views
0

Ich implementiere eine RESTful-API mit Vert.x. Ich habe seinen asynchronen jdbc-Client mit MySQL und c3p0 als Verbindungspool verwendet.vert.x async jdbc schließt keine Verbindungen

Mein Problem ist, dass obwohl die CloseConnection-Handler erfolgreich ist, die eigentliche Datenbankverbindung nicht geschlossen und wiederverwendet wird. Der Pool wird in Sekunden voll, was Folgendes ergibt: BasicResourcePool: 204 - Test erwerben - Pool ist bereits ausgereizt. [verwaltet: 20; max: 20]

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!"); 
     } 
    }); 
}); 

});

Irgendeine Idee, was ich vermisse?

Alles Gute!

Antwort

2

Sie haben wahrscheinlich eine Ausnahme in Ihrem Handler, wenn so etwas passiert, dann wird die letzte Zeile nicht ausgeführt, daher wird der Abschluss nicht aufgerufen und die Verbindung zum Pool zurückgegeben.

Sie sollten Ihren Code mit einem tryfinally Block umwickeln, um sicherzustellen, dass die Verbindung an den Pool zurückgegeben wird.

+0

Sehr gute Idee Paulo, aber das war nicht der Fall. Ich habe den Code aktualisiert (siehe oben). Es sagt immer, dass der Abschluss erfolgreich war. Versucht, es in einem Versuch abzuschließen - schließlich, das gleiche Ergebnis: falsch positiv. – user3159152

+0

In diesem Fall würde ich vorschlagen, ein Problem auf vertx-jdbc-client zu öffnen und ein einfaches Reproduziererbeispiel hinzuzufügen, damit es untersucht werden kann. –

Verwandte Themen