new metodospool metodos hacer conexiones como java database jdbc pooling apache-commons-dbcp

java - metodospool - pool metodos pool



¿Sigue siendo relevante DBCP(agrupación de conexiones de bases de datos de Apache Commons)? (4)

La gente todavía usa DBCP, creo que incluso viene por defecto con Hibernate.

¿DBCP no cumple con sus necesidades actuales?

No soy muy partidario de reemplazar la infraestructura a menos que haya una brecha de rendimiento o funcionalidad que no pueda cubrir, incluso si existen alternativas más nuevas o más lujosas.

La especificación JDBC 3.0 habla sobre la agrupación de Connection (y la declaración preparada).

Tenemos varios programas de Java independientes (es decir, no estamos usando un servidor de aplicaciones) que han estado usando DBCP para proporcionar la agrupación de conexiones. ¿Deberíamos continuar usando DBCP, o podemos aprovechar el agrupamiento proporcionado por JDBC y deshacernos de DBCP?

Estamos utilizando MySQL (Connector / J) y eventualmente agregaremos soporte SQL Server (jTDS); es poco probable que admitamos otras bases de datos.

EDITAR: vea el comentario a continuación sobre mi intento de eliminar la biblioteca de agrupación de conexiones. Parece que el DBCP sigue siendo relevante (tenga en cuenta que algunos comentaristas recomendaron C3P0 sobre DBCP).


DBCP tiene serios defectos. No creo que sea apropiado para una aplicación de producción, especialmente cuando muchos controladores admiten la agrupación en su DataSource forma nativa.

La gota que colmó el vaso, en mi caso, fue cuando descubrí que todo el grupo estaba bloqueado todo el tiempo que se realiza un nuevo intento de conexión a la base de datos. Por lo tanto, si algo le sucede a su base de datos que da como resultado conexiones lentas o tiempos de espera, otros subprocesos se bloquean cuando intentan devolver una conexión al grupo, aunque se hayan terminado usando una base de datos.

Los pools están destinados a mejorar el rendimiento, no a degradarlo. DBCP es ingenuo, complicado y obsoleto.


Basado en el estímulo de otros carteles, intenté eliminar DBCP y usar el controlador JDBC de MySQL directamente (Connector / J 5.0.4). No pude hacerlo.

Parece que si bien el controlador proporciona una base para la puesta en común, no proporciona lo más importante: un grupo real (el código fuente fue útil para esto). Depende del servidor de aplicaciones proporcionar esta parte.

Eché otro vistazo a la documentación de JDBC 3.0 (tengo una copia impresa de algo etiquetado como "Grupo de conexiones del Capítulo 11", no estoy seguro exactamente de dónde vino) y puedo ver que el controlador de MySQL está siguiendo el documento de JDBC.

Cuando miro a DBCP, esta decisión comienza a tener sentido. Una buena administración de la piscina brinda muchas opciones. Por ejemplo, ¿cuándo purgas la conexión no utilizada? ¿Qué conexiones purgas? ¿hay un límite máximo o mínimo para la cantidad máxima de conexiones en el grupo? ¿Deberías probar una conexión para "vida" antes de dársela a la persona que llama? etc.

Resumen: si está haciendo una aplicación Java independiente, necesita usar una biblioteca de agrupación de conexiones. Las bibliotecas de agrupación de conexiones siguen siendo relevantes.


Prefiero usar dbcp o c3p0 porque son proveedores neutrales. Descubrí, al menos con mysql u oracle, que cada vez que trato de hacer algo con el cliente jdbc que no es sql estándar, tengo que introducir la dependencia del tiempo de compilación en las clases del proveedor. Ver, por ejemplo, un ejemplo muy molesto aquí .

No estoy seguro acerca de mysql, pero Oracle usa sus clases específicas no estándar para la agrupación de conexiones.