java / intermediate
Snippet
Kompensierende Aktionen bei Transaktions-Rollbacks mittels TransactionPhase
Wenn eine Transaktionsmethode fehlschlägt und zurückgerollt wird, werden alle Operationen innerhalb dieser Transaktion verworfen. Mit @TransactionalEventListener und TransactionPhase.AFTER_ROLLBACK lassen sich Kompensationslogiken, Bereinigungen oder persistente Fehlerprotokolle nach dem Scheitern ausführen, ohne den primären Transaktionskontext zu belasten.
snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Componentpublic class PaymentAuditLogger {private final AuditLogRepository auditLogRepository;public PaymentAuditLogger(AuditLogRepository auditLogRepository) {this.auditLogRepository = auditLogRepository;}@Async@TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK)public void handlePaymentFailure(PaymentFailedEvent event) {AuditRecord failureRecord = new AuditRecord(event.orderId(),event.reason(),event.timestamp());auditLogRepository.save(failureRecord);}}
spring
Erklärung
1
@Async
Führt den Event-Listener in einem separaten Thread-Pool aus, um den Aufrufer beim Rollback nicht zu blockieren.
2
@TransactionalEventListener(phase = TransactionPhase.AFTER_ROLLBACK)
Konfiguriert den Listener so, dass er ausschließlich bei fehlgeschlagener und zurückgerollter Transaktion auslöst.
3
public void handlePaymentFailure(PaymentFailedEvent event)
Empfängt das typsichere Fehler-Event, das während der fehlgeschlagenen Operation ausgelöst wurde.
4
auditLogRepository.save(failureRecord);
Persistiert Fehlerdetails unabhängig in einer neuen, eigenständigen Datenbanktransaktion.