0 day streak
java / expert
Snippet

Transaction Lifecycle Hooks with TransactionSynchronization

Expert use of the TransactionSynchronizationManager ensures that side effects (like sending emails or external API calls) only occur if the database transaction successfully commits, preventing inconsistent states.

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
Breakdown
1
registerSynchronization(...)
Hooks into the current active transaction managed by Spring's PlatformTransactionManager.
2
afterCommit()
Executed ONLY if the transaction was committed successfully. Perfect for non-transactional actions.
3
afterCompletion(int status)
A safety hook called regardless of the outcome (commit or rollback) to perform cleanup.