Ist MySQL Connector / JDBC-Thread-sicher?
-
06-07-2019 - |
Frage
Ist die Standard-MySQL JDBC-Treiber Thread-sicher? Insbesondere möchte ich auf alle Threads eine einzige Verbindung verwenden, aber jede Aussage wird nur in einem einzigen Thread verwendet werden. Gibt es bestimmte Szenarien, die sicher und andere, die es nicht sind? Was ist Ihre Erfahrung hier?
Lösung
Die Transaktionen werden gestartet / begangen pro Verbindung. Es sei denn, Sie einige sehr spezifische Dinge tun (ich kann nicht wirklich denken Sie an einem Beispiel, wo das gerechtfertigt wäre, ehrlich zu sein), du bist besser dran mit einem Verbindungspool und Verbindung pro Thread.
Andere Tipps
Wenn autocommit = 1, dann ist es sehr möglich ist, mehrere Threads teilen sich die gleiche Verbindung zu haben, sofern der Zugriff auf die Verbindung synchronisiert ist. Wenn autocommit = 0, werden Sie den Zugriff auf die Verbindung über irgendeine Art von Mutex bis begehen geschieht kontrollieren müssen.
Wenn Sie nicht unbedingt in Höhe von Verbindungen beschränkt sind Ihre Anwendung haben kann, ein Verbindungspool kann eine sinnvolle Alternative sein.
Aufgrund meiner bisherigen Erfahrungen, Connection
Objekt Thread nicht sicher in Connector / J 5.1.33.
Ich habe in einer Deadlock-Situation in Bug 67760 beschrieben lief. Nicht sicher, ob es ein Fehler ist, aber eine vernünftige Ratschläge aus der Diskussion war:
[12. Dezember 2012 20.33] Todd Farmer
Bitte nicht ein einziges Connection-Objekt über mehrere Threads verwenden ohne richtige Synchronisierung. Connector / J - und was noch wichtiger ist, das MySQL-Client-Server-Protokoll - erlaubt keine gleichzeitigen Operationen die gleiche Connection-Objekt verwenden. Wenn ein Connection-Objekt muss über Threads gemeinsam genutzt werden, ist es in der Verantwortung der Anwendungscode Autor, um sicherzustellen, Operationen richtig serialisiert werden.