para example descargar java mysql jdbc apache-commons-dbcp

java - example - ¿Cuál es la diferencia entre autoReconnect y autoReconnectForPools en el conector MySql/J?



mysql url connection example (3)

En la referencia de configuración para el controlador J de conector MySql, se emite un emptor de advertencia sobre el uso de la propiedad autoReconnect . Seguí las instrucciones y aumenté el wait_timeout de mi servidor. Dado que estoy usando DBCP (estoy considerando moverme a c3po después de leer varias publicaciones sobre Stackoverflow derribando DBCP), ¿está bien usar la propiedad autoReconnectForPools ? ¿Qué hace realmente cuando está habilitado bajo DBCP o cualquier grupo de conexiones para ese asunto?


La función autoReconnect de MySQL está en desuso, ya que tiene muchos problemas (ref: documentación oficial).

autoReconnectForPools tiene poco que ver con autoReconnect , tiene más que ver con autoCommit y autoCommit - cuando los 3 son true , hará ping al servidor al final de cada transacción y se volverá a conectar automáticamente si es necesario.

La validación de conexión de DBCP es imperfecta: incluso cuando se establece testOnBorrow , algunas veces devuelve conexiones rotas del conjunto (sin mencionar el hecho de probar una conexión antes de que cada préstamo sea terriblemente ineficiente).

Según este artículo , HikariCP parece ser una mejor implementación de grupo, ya que es capaz de usar API JDBC4 isValid() que es mucho más rápido que ejecutar una consulta de prueba, y está especialmente diseñado para nunca devolver conexiones rotas a la aplicación cliente.


¿Seguro que estás utilizando DBCP correctamente?

De acuerdo con las notas de configuración cortas , se supone que maneja los tiempos de espera muy bien gracias al valor predeterminado de testOnBorrow=true (prueba la conexión antes de usarse, y si falla, se elimina del grupo e intentamos obtener una nueva en su lugar) .

Lo único que debe hacer es asegurarse de configurar la propiedad validationQuery en una cadena no nula, por ejemplo, "SELECT 0" para la base de datos MySQL ( aquí hay una publicación sobre diferentes valores de validaciónQuery por DB utilizada).


autoReconnect lanzará una SQLException al cliente, pero intentará restablecer la conexión.

autoReconnectForPools intentará hacer ping al servidor antes de cada ejecución de SQL.

Tuve muchos problemas con dbcp en el pasado, especialmente las desconexiones. La mayoría se resolvió moviéndose a c3p0 . Tenga en cuenta que el controlador mysql tiene probador de conexión para c3p0 (com.mysql.jdbc.integration.c3p0.MysqlConnectionTester).

Además, es posible que desee comprobar esto: Opciones de agrupación de conexiones con JDBC: DBCP vs C3P0