Ich kann den Verhaltensunterschied zwischen der PROPAGATION_REQUIRES_NEW
und der PROPAGATION_NESTED
Weitergaberichtlinie nicht verstehen . Es scheint mir, dass in beiden Fällen der aktuelle Prozess zurückgesetzt wird, aber nicht die gesamte Transaktion. Irgendeine Ahnung?
java
spring
transactions
propagation
Alexis Dufrenoy
quelle
quelle
Antworten:
Siehe diesen Link: PROPAGATION_NESTED versus PROPAGATION_REQUIRES_NEW? Jürgen Hoeller erklärt es sehr gut. - Das Spring Source Forum ist seit dem 28. Februar 2019 vollständig offline. Sie können jedoch den entsprechenden Teil des Artikels im folgenden Zitat lesen
quelle
PROPAGATION_REQUIRES_NEW: Verwendet für jeden betroffenen Transaktionsbereich eine völlig unabhängige Transaktion. In diesem Fall sind die zugrunde liegenden physischen Transaktionen unterschiedlich und können daher unabhängig festgeschrieben oder zurückgesetzt werden, wobei eine äußere Transaktion nicht vom Rollback-Status einer inneren Transaktion betroffen ist.
PROPAGATION_NESTED: Verwendet eine einzelne physische Transaktion mit mehreren Sicherungspunkten, auf die ein Rollback durchgeführt werden kann. Solche teilweisen Rollbacks ermöglichen es einem inneren Transaktionsbereich, einen Rollback für seinen Bereich auszulösen, wobei die äußere Transaktion die physische Transaktion fortsetzen kann, obwohl einige Operationen zurückgesetzt wurden. Diese Einstellung wird normalerweise JDBC-Sicherungspunkten zugeordnet und funktioniert daher nur mit JDBC-Ressourcentransaktionen.
Check Frühjahr Dokumentation
quelle
PROPAGATION_REQUIRES_NEW
: Die äußere Transaktion wird zu Beginn der inneren ausgesetzt und fortgesetzt, sobald die innere abgeschlossen ist. Jede innere Transaktion wird nach Abschluss festgeschrieben / zurückgesetzt.PROPAGATION_NESTED
: Die verschachtelte Transaktion ist Teil der äußeren Transaktion, wird also erst am Ende der äußeren Transaktion festgeschrieben.Bitte finden Sie den Unterschied
1.) Use of NESTED Transaction
In einer verschachtelten Transaktion ausführen, wenn eine aktuelle Transaktion vorhanden ist, verhalten Sie sich wie PROPAGATION_REQUIRED else. Verschachtelte Transaktionen werden von Spring unterstützt
2.) Verwendung der erforderlichen Transaktion Unterstützen Sie eine aktuelle Transaktion, erstellen Sie eine neue, falls keine vorhanden ist. . Es bedeutet für Bankdomänen wie Abheben, Einzahlen, Aktualisieren der Transaktion
3.) Verwendung der Transaktion REQUIRES_NEW Erstellen Sie eine neue Transaktion und setzen Sie die aktuelle Transaktion aus, falls vorhanden.
quelle