Does BoneCP (oder eine andere Pool) in der Nähe Verbindung Aussagen, wenn Verbindung zum Pool zurückgegeben?

StackOverflow https://stackoverflow.com/questions/4348814

  •  30-09-2019
  •  | 
  •  

Frage

Does BoneCP (oder ein anderer Pool) in der Nähe Verbindung Aussagen, wenn Verbindung zum Pool zurückgegeben? Wie ich verstehe, nicht nennt es nicht unbedingt schließen Methode der Verbindung, so dass es keine automatische Aussage Schließen. So tut es in der Nähe Aussagen in irgendeiner anderen Art und Weise oder muß ich sie manuell schließen?

War es hilfreich?

Lösung

Die JDBC-Spezifikation ist sehr unklar, was unter normaler Verbindung passieren sollte in der Nähe so, unabhängig von dem Pool, den Sie verwenden, sollten Sie immer stellen Sie sicher, manuell die Aussagen zu verschließen. Überlegen Sie, was Ihre Anwendung passieren würde, wenn Sie wechseln zu einem anderen Pool in Zukunft entscheiden, die nicht tun, was Sie es für Sie tun erwarten.

Was BoneCP, die Antwort nein ist, wird es nicht in der Nähe von Ihren Aussagen für Sie wenn es so konfiguriert werden kann, Ihre Verbindungen zu schließen, wenn Sie vergessen. Dies ist aus Gründen Performance, da einige JDBC-Treiber intern alle noch aktiven Aussagen schließen sich aus, wenn Sie in der Nähe von der Verbindung.

Allerdings BoneCP werden alle zwischengespeicherten Anweisungen abzusperren, wenn Sie Aussagen Caching aktiviert haben.

EDIT:. Ab v0.8.0, Unterstützung hinzugefügt wurde, nicht geschlossene Aussagen zu schließen (+ auszudrucken Stack-Trace Stelle, wo Anweisung geöffnet wurde, wenn Sie wollen)

Andere Tipps

BoneCP (0.8.0 -RC3), gibt es zwei mögliche Ergebnisse,

close off mit einiger Konfiguration für nicht zwischengespeicherte Anweisung nur

nicht dicht ab, egal wie Sie es für Cache-Anweisung konfigurieren auch Sie berufen sich auf die statement.close (explizit).

Es gibt eine StatementCache Klasse der preparedStatement & Callablestatement zu Cache. Die Standardeinstellung ist deaktiviert. Sie müssen rufen BoneCPConfig.setStatementsCacheSize () mit dem> 0 Parameter zu aktivieren. Nach dem Aktivieren des Cache,

1 BoneCP.Statement.Close () wird Bypass die zugrunde liegende Aussage schließen, wenn es zwischengespeichert wird.

  public void close() throws SQLException {
      this.connectionHandle.untrackStatement(this);
  this.logicallyClosed.set(true);
  if (this.logStatementsEnabled){
        this.logParams.clear();
        this.batchSQL = new StringBuilder();
      }

      if (this.cache == null || !this.inCache){ // no cache = throw it away right now
           this.internalStatement.close();
  }
}

2 BoneCP.Connection.close () Wird einfach nur den Cache durch die Funktion deaktivieren „clearStatementCaches ()“

Die gute Nachricht ist MYSQL JDBC-Treiber, Connector / J, werden alle geöffneten Aussagen schließen, wenn Sie die Verbindung über die Funktion „closeAllOpenStatements ()“ schließen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top