Question

Pour reformuler la question: dois-je éviter de partager des instances de classes qui mettent en œuvre java.sql.Connection entre les différents threads

?
Était-ce utile?

La solution

Si le pilote JDBC est conforme spec, alors techniquement oui, l'objet est thread-safe, mais vous devez éviter les connexions de partage entre les threads, puisque l'activité sur la connexion signifie qu'un seul thread pourra rien faire à la fois.

Vous devez utiliser un pool de connexion (comme Apache Commons DBCP ) pour faire en sorte que chaque thread obtient sa propre connexion.

Autres conseils

java.sql.Connection est une interface. Donc, tout dépend de la mise en œuvre du conducteur, mais en général, vous devriez éviter de partager la même connexion entre les différents fils et les pools de connexions d'utilisation. En outre, il est également conseillé d'avoir un nombre de connexions dans le pool supérieur que le nombre de threads de travail.

Ceci est plutôt un vieux fil, mais pour ceux qui sont à la recherche d'une réponse au sujet de Microsoft SQL Server, voici la réponse:

  

SQLServerConnection est pas thread déclarations de sécurité, mais plusieurs créés à partir d'une seule connexion peut être en train de traiter simultanément dans des threads simultanés.

et

  

SQLServerConnection implémente une connexion JDBC à SQL Server.

De tout ce qui précède, vous pouvez partager des déclarations, mais pas les connexions, et dans le cas où vous avez besoin d'une connexion dans chaque thread, vous pouvez utiliser un pool de threads.

En savoir plus ici

Nous avions ArrayOutOfBoundsException sur le cache de l'instruction Websphere de c'est pooleddatasource, et nous avons dû désactiver ce cache.

Nous avons eu un traitement qui a été lui-même le blocage.

Tout cela à cause de l'accès actuel à la connexion, de sorte que la conclusion par la pratique de la vie réelle, est que vous ne devez pas le faire.

scroll top