¿El BoneCP (o cualquier otra piscina) las declaraciones de cierre de conexión cuando la conexión se devuelve a la piscina?

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

  •  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?

¿Fue útil?

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 ()"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top