java / expert
Snippet
Transaktions-Lifecycle-Hooks mit TransactionSynchronization
Die Experten-Nutzung des TransactionSynchronizationManager stellt sicher, dass Seiteneffekte (wie das Versenden von E-Mails oder externe API-Aufrufe) nur auftreten, wenn die Datenbanktransaktion erfolgreich abgeschlossen wird, was inkonsistente Zustände verhindert.
snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Servicepublic class OrderService {@Transactionalpublic void processOrder(Order order) {orderRepository.save(order);TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {@Overridepublic void afterCommit() {emailService.sendConfirmation(order);}@Overridepublic void afterCompletion(int status) {if (status == STATUS_ROLLED_BACK) {logger.error("Transaction failed for order: {}", order.getId());}}});}}
spring
Erklärung
1
registerSynchronization(...)
Klinkt sich in die aktuell aktive Transaktion ein, die vom PlatformTransactionManager von Spring verwaltet wird.
2
afterCommit()
Wird NUR ausgeführt, wenn die Transaktion erfolgreich abgeschlossen wurde. Ideal für nicht-transaktionale Aktionen.
3
afterCompletion(int status)
Ein Sicherheits-Hook, der unabhängig vom Ergebnis (Commit oder Rollback) aufgerufen wird, um Aufräumarbeiten durchzuführen.