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
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
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.