Как выполнить действия после commit или rollback транзакции?
Spring позволяет регистрировать callbacks, которые выполняются после завершения транзакции.
Можно отреагировать отдельно на commit и rollback.
Для этого используются специальные API транзакционного менеджера.
Такой подход позволяет безопасно запускать побочные действия.
Это важно для асинхронных операций и интеграций.
Часто возникает необходимость выполнить логику строго после фиксации транзакции.
Если выполнить действие внутри транзакции:
данные могут быть ещё не зафиксированы
при rollback побочное действие уже выполнено
TransactionSynchronizationSpring предоставляет механизм синхронизации с транзакцией.
TransactionSynchronizationManager.registerSynchronization(
new TransactionSynchronization() {
@Override
public void afterCommit() {
// логика после commit
}
@Override
public void afterCompletion(int status) {
if (status == STATUS_ROLLED_BACK) {
// логика после rollback
}
}
}
);
отправка сообщений
публикация событий
запуск асинхронных задач
интеграции с внешними системами
Можно использовать:
@TransactionalEventListener
фазу AFTER_COMMIT или AFTER_ROLLBACK
Это упрощает код и делает его более декларативным.
Действия после commit или rollback нужно выполнять через транзакционные callbacks, а не напрямую внутри бизнес-логики.