0 Tage Serie
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
@Service
public class OrderService {
@Transactional
public void processOrder(Order order) {
orderRepository.save(order);
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
@Override
public void afterCommit() {
emailService.sendConfirmation(order);
}
@Override
public 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.