У меня есть несколько операций (служебные вызовы, но я думаю, это не важно), которые мне нужно выполнить атомарно. Допустим, у меня есть операции A, B и C, которые читают и записывают DB несколько раз, и мне нужно:
- B, чтобы увидеть изменения DB, которые сделал A (и C, чтобы увидеть, что A и B сделал). Это важно, потому что некоторые операции используют результаты предыдущих операций.
- Все остальные (скажем, некоторые другие транзакции) НЕ видят изменений (например, если они читают БД), пока все три операции не будут завершены и транзакция не будет зафиксирована в целом (или откатился, если что-то пойдет не так). Это важно, потому что рассматриваемые таблицы БД не согласованы, пока все эти операции не будут завершены.
Я думаю, что @Transactional (как в примере ниже) - это именно то, что мне здесь нужно (с правильно настроенной изоляцией et c.), но я не уверен. Могу ли я использовать @Transactional для решения этой проблемы? Если да, то как правильно настроить? Спасибо.
@Transactional(...)
public void someTransactionalMethod(...) {
callA();
callB();
callC();
}
PS: вы можете предложить, чтобы я попытался разработать вещи немного по-другому (лучше), но, боюсь, это выходит за рамки возможного. Я ограничен существующим кодом et c. (например, внутренняя работа большинства из этих операций не находится под моим контролем).