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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top