¿El BoneCP (o cualquier otra piscina) las declaraciones de cierre de conexión cuando la conexión se devuelve a la piscina?
-
30-09-2019 - |
Pregunta
¿El BoneCP (o cualquier otra piscina) declaraciones del cierre de conexión cuando la conexión se devuelve a la piscina? Según tengo entendido, no se llama a cerrar método de conexión real, así que no hay cierre de los estados automática. Por lo tanto, lo hace declaraciones cerca de cualquier otra manera o qué necesito para cerrar de forma manual?
Solución
La especificación JDBC es muy claro en lo que debería ocurrir bajo estrecha conexión normal por lo que, independientemente de la piscina se utilice, debe siempre asegurarse de cerrar las cuentas manualmente. Considere lo que sucedería a su aplicación si se opta por cambiar a una piscina diferente en el futuro que no hace lo que espera que haga por ti.
En cuanto a BoneCP, la respuesta es no, no va a cerrar sus estados de cuenta de que a pesar de que se puede configurar para cerrar las conexiones si se olvida. Esto es por razones de rendimiento, ya que algunos controladores JDBC van a cerrar ninguna declaración todavía activos internamente si cerrar la conexión.
Sin embargo, BoneCP cerrará fuera de cualquier declaración en caché si tiene activada la caché declaraciones.
EDIT:. Como de v0.8.0, se ha añadido soporte para cerrar declaraciones no cerrados (+ imprimir seguimiento de la pila de la ubicación donde se abrió declaración si quieres)
Otros consejos
BoneCP (0.8.0 -RC3), hay 2 resultados posibles,
cerrar con un poco de configuración para declaración sin almacenamiento en caché única
no cerrar sin importar cómo se configure para la declaración en caché incluso se invoca el Statement.close () de forma explícita.
Hay una clase StatementCache a la caché PreparedStatement y CallableStatement. El valor por defecto está desactivada. Usted necesita llamar BoneCPConfig.setStatementsCacheSize () con el> 0 parámetro para que pueda. Después de habilitar la memoria caché,
1 BoneCP.Statement.Close () pasará por alto la declaración de cierre subyacente si se almacena en caché.
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 () Será simplemente borrar la caché a través de la función "clearStatementCaches ()"
La buena noticia es MYSQL controlador JDBC, Connector / J, se cerrarán todas las cuentas abiertas cuando se cierra la conexión a través de la función "closeAllOpenStatements ()"