Es gab verschiedene Beiträge zum Protokollieren der Aktivität (Start, Commit & Rollback) von Spring Transaktionsmanager. Ich bin jedoch kürzlich auf ein Deadlock-Problem gestoßen, bei dem das Protokollieren nur der Aktivität nicht ausreicht.So protokollieren Sie Spring transaction content
Das grundlegende Problem in unserem Code ist eine unordentliche Verwendung der Transaktion propagiert Required und Requires_NEW. Es gibt so viele Methodenaufrufe hin und her, dass wir viele Transaktionen aufeinander gestapelt haben. Leider ist die Codebasis riesig und die Lösung dringlich ... (Wir alle wissen, was das ist.)
Das Problem war ein Deadlock, weil Code Abfrage-Entitäten in einer Transaktion hinzugefügt wurde, die in einer anderen sequenziell geändert wurden Transaktion. Spring spuckt eine Exception aus, die angibt, dass das Update von Entity X abgelaufen ist, weil es gesperrt ist. Nun, das zu wissen ist nett, aber wie findet man den fehlerhaften Code: Die Abfrage, die das frühe Sperren durchführt.
Meine Frage (endlich): Gibt es eine Möglichkeit, die Entitäten, die einer Transaktion hinzugefügt werden, zu protokollieren? Auf diese Weise kann ich gezielt nach Transaktionen suchen, die die Entität sperren, über die sich Spring beschweren.
Danke! :-)