java multithreading jdbc thread-safety dbconnection

¿Es seguro el subproceso java.sql.Connection?



multithreading jdbc (4)

Esto es más bien un hilo viejo, pero para aquellos que están buscando una respuesta con respecto a Microsoft SQL Server, aquí está la respuesta:

SQLServerConnection no es seguro para subprocesos, sin embargo, varias sentencias creadas a partir de una única conexión pueden procesarse simultáneamente en subprocesos concurrentes.

y

SQLServerConnection implementa una conexión JDBC a SQL Server.

De todo lo anterior, puede compartir declaraciones pero no conexiones, y en caso de que necesite una conexión en cada hilo, puede usar un grupo de hilos.

Lea más here

Para reformular la pregunta: ¿debo evitar compartir instancias de clases que implementen java.sql.Connection entre diferentes subprocesos?


Si el controlador JDBC cumple con las especificaciones, técnicamente sí, el objeto es seguro para subprocesos, pero debe evitar compartir conexiones entre hilos, ya que la actividad en la conexión significará que solo un hilo podrá hacer cualquier cosa a la vez. .

Debe usar un grupo de conexiones (como Apache Commons DBCP ) para asegurarse de que cada hilo tenga su propia conexión.


Teníamos ArrayOutOfBoundsException en el caché de sentencias de Websphere de su origen de datos agrupado, y tuvimos que deshabilitar ese caché.

Tuvimos un tratamiento que se estaba bloqueando a sí mismo.

Todo eso debido al acceso actual a la conexión, por lo que la conclusión de la práctica de la vida real es que no debes hacer eso.


java.sql.Connection es una interfaz. Por lo tanto, todo depende de la implementación del controlador, pero en general debe evitar compartir la misma conexión entre diferentes subprocesos y usar grupos de conexiones. También se aconseja tener un número de conexiones en el grupo superior al número de subprocesos de trabajo.