Hardtransactions
Как работают транзакции в Spring?
1Постановка
Разберём, что от вас хотят в этом вопросе и как к нему подступиться на собеседовании.
2Решение
@Transactional — declarative transaction management. Spring создаёт proxy, открывает транзакцию перед методом, коммитит в конце, откатывает при unchecked exception.
@Service
public class TransferService {
@Transactional(
propagation = Propagation.REQUIRED,
isolation = Isolation.READ_COMMITTED,
rollbackFor = Exception.class, // откатывать ВСЕ exceptions
timeout = 30,
readOnly = false
)
public void transfer(Long from, Long to, BigDecimal amount) { /* ... */ }
}Propagation: REQUIRED (default), REQUIRES_NEW, SUPPORTS, NOT_SUPPORTED, NEVER, MANDATORY, NESTED (savepoint).
Проблемы:
- self-invocation — proxy не используется, транзакция не откроется;
- rollback по умолчанию только на unchecked — нужно
rollbackFor = Exception.class; - на private методе не работает (proxy не видит);
TransactionTemplate— programmatic;PlatformTransactionManager— для разных БД.
3Как отвечать
- Сначала уточните условия и ограничения, покажите аналитическое мышление.
- Рассуждайте вслух — интервьюеру важен ход мысли, а не только финальный ответ.
- Оцените сложность по времени и памяти (Big-O), если это алгоритмический вопрос.
💡
На реальном собеседовании Alffert подскажет развёрнутый ответ в реальном времени.