Non BoneCP (o qualsiasi altra piscina) le dichiarazioni di collegamento vicino quando il collegamento viene restituito alla piscina?
-
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?
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 ()"