Non BoneCP (o qualsiasi altra piscina) le dichiarazioni di collegamento vicino quando il collegamento viene restituito alla piscina?

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

  •  30-09-2019
  •  | 
  •  

Domanda

non BoneCP (o qualsiasi altra piscina) le dichiarazioni chiusura di connessione quando il collegamento viene restituito alla piscina? A quanto ho capito, che non chiama vicino il metodo di connessione effettiva, quindi non c'è la chiusura automatica dichiarazione. Così, fa dichiarazioni vicini in qualsiasi altro modo o devo chiudere manualmente?

È stato utile?

Soluzione

Il JDBC spec è molto chiaro su quello che dovrebbe accadere in collegamento normale vicino in modo, a prescindere dalla piscina si utilizza, si dovrebbe sempre assicurarsi di chiudere le dichiarazioni manualmente. Si consideri che cosa accadrebbe alla vostra applicazione se si sceglie di passare a un pool diverso nel futuro che non fa quello che ci si aspetta che faccia per voi.

Per quanto riguarda BoneCP, la risposta è no, non sarà chiudere gli estratti conto per voi anche se può essere configurato in modo da chiudere le connessioni se si dimentica. Questo è per motivi di prestazioni dal momento che alcuni driver JDBC chiuderanno fuori le dichiarazioni ancora attivi internamente se si chiude fuori la connessione.

Tuttavia, BoneCP chiuderà fuori le dichiarazioni memorizzate nella cache se si dispone di istruzioni cache abilitata.

EDIT:. Come di v0.8.0, il supporto è stato aggiunto per chiudere dichiarazioni non chiusi (+ stampare traccia dello stack del luogo in cui è stata aperta dichiarazione, se si vuole)

Altri suggerimenti

BoneCP (0.8.0 -RC3), ci sono 2 risultati possibili,

stretta con qualche configurazione per dichiarazione non memorizzato nella cache solo

non vicino off non importa come si configura per la dichiarazione di cache , anche si richiama lo statement.close () in modo esplicito.

C'è una classe StatementCache alla cache del PreparedStatement & CallableStatement. Il valore di default è disabilitata. È necessario chiamare BoneCPConfig.setStatementsCacheSize () con il parametro 0> per attivarlo. Dopo abilitare la cache,

1 BoneCP.Statement.Close () consentirà di bypassare il sottostante dichiarazione vicino se è memorizzato nella cache.

  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 () Sarà semplicemente cancellare la cache attraverso la funzione "clearStatementCaches ()"

La notizia buona è MYSQL driver JDBC, Connector / J, chiuderà tutte le istruzioni aperte quando si chiude la connessione attraverso la funzione "closeAllOpenStatements ()"

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top