0 Tage Serie
java / expert
Snippet

Eventual Consistency mit TransactionalEventListener

Um sicherzustellen, dass externe Seiteneffekte (wie E-Mails) nur auftreten, wenn eine Transaktion erfolgreich committet wurde, verwendet man @TransactionalEventListener mit der Phase AFTER_COMMIT.

snippet.java
java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@Service
public class UserProcessor {
private final ApplicationEventPublisher publisher;
@Transactional
public void registerUser(User user) {
repository.save(user);
publisher.publishEvent(new UserRegisteredEvent(user));
}
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
public void handleUserRegistration(UserRegisteredEvent event) {
emailService.sendWelcomeEmail(event.getUser());
}
}
spring
Erklärung
1
phase = TransactionPhase.AFTER_COMMIT
Gibt an, dass der Listener erst nach dem Commit der Transaktion ausgeführt werden soll.
2
publisher.publishEvent(...)
Versendet das Event innerhalb des aktuellen Transaktionskontexts.