@Transactional Methode Aufruf einer anderen Methode ohne @Transactional Anotation?
Ich habe eine Methode in einer Service-Klasse, die markiert war, als @Transactional, aber es war auch ruft einige andere Methoden in der selben Klasse, die waren nicht gekennzeichnet als @Transactional.
Bedeutet das, dass der Anruf zu trennen Methoden sind, was die Anwendung zu öffnen separate verbindungen zu DB oder auszusetzen, die übergeordnete Transaktion, etc?
Was ist das Standard-Verhalten für eine Methode ohne Anmerkungen, die aufgerufen wird, eine andere Methode mit @Transactional annotation?
Dank
InformationsquelleAutor der Frage goe | 2011-06-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie eine Methode aufrufen, ohne
@Transactional
innerhalb einer Transaktion ausgeführt werden, die übergeordnete Transaktion wird weiterhin auf die neue Methode. Es wird die gleiche Verbindung von der übergeordneten Methode(mit@Transactional
) und jede Ausnahme verursacht, die in der aufgerufenen Methode(ohne@Transactional
wird verursachen, dass die Transaktion ein rollback-Konfiguration in der Transaktion definition.Wenn Sie eine Methode aufrufen, die mit einem
@Transactional
annotation aus einer Methode mit@Transactional
innerhalb der gleichen Instanz, dann werden die Methoden genannt transaktionalen Verhaltens werden keine Auswirkungen auf die Transaktion. Aber wenn Sie eine Methode aufrufen, die mit einer Transaktion-definition aus einer anderen Methode mit einer Transaktion-definition, und Sie sind in unterschiedlichen Instanzen, dann wird der code in der aufgerufenen Methode werden Folgen der Transaktion Definitionen gegeben, die in der aufgerufenen Methode.Können Sie weitere details finden Sie im Abschnitt Deklarativen Transaktions-management von Frühjahr Transaktion Dokumentation.
Spring deklaratives Transaktions-Modell verwendet AOP-proxy. also der AOP-proxy ist zuständig für die Erstellung der Transaktionen. Der AOP-proxy wird nur aktiv, wenn die Methoden der Instanz aufgerufen werden, von außerhalb der Instanz.
InformationsquelleAutor der Antwort Arun P Johny
Das hängt übertragungsgrad. Hier sind alle möglichen Ebenen Werte.
Beispielsweise im Falle einer Vermehrung Ebene ist GESCHACHTELTE einer aktuellen Transaktion wird "suspend" und eine neue Transaktion erstellt werden ( Hinweis: die tatsächliche Schaffung einer geschachtelten Transaktion wird nur auf bestimmte Transaktions-Manager )
Den Standard-übertragungsgrad ( wie du es nennst, "Verhalten" ) ist ERFORDERLICH. Im Fall eines "inneren" Methode genannt wird, hat eine
@Transactional
- annotation ( oder getätigt deklarativ über XML ) ist, wird ausgeführt, innerhalb des gleichen Transaktionz.B. "nichts neues" erstellt.InformationsquelleAutor der Antwort tolitius
@Transactional markiert die Transaktion-Grenze (Anfang/Ende) aber der Transaktion selbst ist gebunden an den thread. Sobald eine Transaktion beginnt er vermehrt sich über Methodenaufrufe hinweg, bis die ursprüngliche Methode zurück und die Transaktion ein commit/Rollback ausgeführt wird.
Wenn eine andere Methode aufgerufen wird, hat ein @Transactional annotation dann die Vermehrung hängt von der Ausbreitung Attribut der annotation.
InformationsquelleAutor der Antwort sourcedelica