sql >> Base de Datos >  >> RDS >> Mysql

Cierre de conexiones JDBC en el grupo

Al usar Connection Pool, ¿se debe cerrar la conexión al final? Si es así, ¿no se pierde el propósito de agrupar? Y si no, ¿cómo sabe DataSource cuándo se libera una instancia particular de Connection y se puede reutilizar? Estoy un poco confundido con esto, se agradece cualquier sugerencia.

Sí, ciertamente también necesita cerrar la conexión agrupada. En realidad, es un envoltorio alrededor de la conexión real. Debajo de las cubiertas liberará la conexión real de regreso a la piscina. Depende más del grupo decidir si la conexión real realmente cerrarse o reutilizarse para un nuevo getConnection() llamar. Por lo tanto, independientemente de si está utilizando un grupo de conexiones o no, debe siempre cierre todos los recursos JDBC en orden inverso en el finally bloque del try bloque donde los has adquirido. En Java 7, esto se puede simplificar aún más usando try-with-resources declaración.

¿Se acerca el siguiente método al estándar? Parece un intento de obtener una conexión del grupo, y si no se puede establecer DataSource, use el antiguo DriverManager. Ni siquiera estamos seguros de qué parte se ejecuta en tiempo de ejecución. Repitiendo la pregunta anterior, ¿debería cerrarse la conexión que sale de ese método?

El ejemplo da bastante miedo. Solo necesita buscar/inicializar el DataSource solo una vez durante el inicio de la aplicación en algún constructor / inicialización de una clase de configuración de DB en toda la aplicación. Luego simplemente llame a getConnection() en la misma fuente de datos durante el resto de la vida útil de la aplicación. Sin necesidad de sincronización ni comprobaciones nulas.

Ver también: