12 Stimmen

Bindet der Spring-Transaktionsmanager eine Verbindung an einen Thread?

Ich habe den folgenden Thread gefunden: Wie genau arbeiten JdbcTemplate und TransactionManager zusammen?

Der erste Satz davon:

Soweit ich es verstanden habe, bindet DataSourceTransactionManager eine JDBC-Verbindung von der angegebenen DataSource an den aktuellen Thread, wobei eine threadgebundene Verbindung pro DataSource möglich ist. Wenn es sich um einen Pool von Verbindungen handelt, wird eine der verfügbaren Verbindungen genommen.

... ist genau das, was ich wissen will.

Wenn Sie einen Transaktionsmanager verwenden, haben Sie dann am Ende für jeden Thread eine eigene einzelne Verbindung? Und wie lange hält diese Verbindung? Verwendet ein und derselbe Thread dieselbe Verbindung während einer einzigen Anfrage, oder ist da noch etwas anderes im Gange? Ich versuche nur zu verstehen, was genau Spring darunter tut, wenn Sie einen Transaktionsmanager haben und wenn Sie nicht haben (unabhängig davon, ob Sie tatsächlich eine Transaktion haben oder nicht).

16voto

skaffman Punkte 389758

Wenn Sie einen Transaktionsmanager verwenden, haben Sie dann am Ende für jeden Thread eine eigene einzelne Verbindung? Und wie lange hält diese Verbindung?

Die Verbindung wird im Allgemeinen aus einem Verbindungspool bezogen. Die Verbindung wird aus dem Pool ausgeliehen, wenn der Transaktionsmanager die Transaktion startet, und dann an den Pool zurückgegeben, wenn die Transaktion beendet ist. Während dieser Zeit ist die Verbindung an den Thread gebunden.

Verwendet derselbe Thread dieselbe Verbindung während einer einzigen Anfrage?

Sie verwendet dieselbe Verbindung für die Dauer der Transaktion. Die Anfrage selbst ist irrelevant.

unabhängig davon, ob Sie tatsächlich eine Transaktion haben oder nicht

Sie siempre eine Transaktion haben, ob Sie das nun ausdrücklich tun oder nicht. Wenn Sie keine explizit konfigurieren, werden der JDBC-Treiber und die Datenbank eine Transaktion so lange starten und beenden, wie es dauert, die einzelne Operation durchzuführen. Die Transaktionsverwaltung von Spring (oder die Transaktionsverwaltung eines anderen Frameworks) ermöglicht es Ihnen, die Lebensdauer dieser Transaktion über mehrere Operationen zu verlängern. Dies erfordert die ausschließliche Nutzung der Verbindung für die Dauer der Transaktion.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X