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

¿Estoy usando Java PooledConnections correctamente?

Esta no es la manera correcta. El origen de datos debe ser administrado por cualquier contenedor en el que esté ejecutando la aplicación. El MysqlConnectionPoolDataSource es no un grupo de conexiones. Es solo una implementación concreta del javax.sql.DataSource interfaz. Normalmente lo define en el contexto JNDI y lo obtiene desde allí. También MySQL mismo lo establece todo explícitamente en su documentación .

Ahora, cómo usarlo depende del propósito de la aplicación. Si se trata de una aplicación web, debe consultar la documentación de recursos JNDI del servletcontainer/appserver en cuestión. Si es, por ejemplo, Tomcat, puede encontrarlo aquí . Si está ejecutando una aplicación cliente, para lo cual cuestionaría mucho el valor de un grupo de conexiones, entonces debe buscar un marco de trabajo de agrupación de conexiones que pueda hacer uso de la fuente de datos agrupada de conexiones proporcionada por MySQL, como C3P0 .

El otro problema con el código que publicaste es que PooledConnection#getConnection() devolverá el subyacente conexión que por lo tanto no una conexión agrupada. Cerrarlo no devolverá la conexión al grupo, sino que realmente lo cerrará. El grupo tiene que crear una nueva conexión cada vez.

Luego, la historia de la seguridad de los subprocesos, que depende de la real marco de agrupación de conexiones en cuestión. C3P0 ha demostrado su solidez durante años, no se preocupe por eso siempre que escriba el código JDBC de acuerdo con el idioma estándar, es decir, use solo las interfaces JDBC y adquirir y cerrar todos los recursos (Connection , Statement y ResultSet ) en el alcance más corto posible.