Проверяет знания о декларативном управлении транзакциями и повторных попытках.
@Transactional оборачивает метод в транзакцию: BEGIN перед выполнением, COMMIT при успехе, ROLLBACK при исключении. @Retryable (из Spring Retry) автоматически повторяет вызов метода при указанном типе исключений, с настройками количества попыток, задержек и backoff-политики.
@Transactional:
Propagation: режим распространения (REQUIRED, REQUIRES_NEW).
Isolation: уровень изоляции (READ_COMMITTED, SERIALIZABLE).
ReadOnly: флаг для оптимизации чтения.
RollbackFor/NoRollbackFor: указывают, какие исключения откатывают транзакцию.
@Retryable:
Параметры: value (тип исключения), maxAttempts, backoff (delay, multiplier).
Работает через AOP-прокси, перехватывает исключение, ждет и повторяет вызов.
В комбинации с @Recover позволяет обрабатывать исчерпавшие попытки.
Пример:
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
public void transfer(...) { ... }
@Retryable(value = RemoteServiceException.class, maxAttempts = 3, backoff = @Backoff(2000))
public String callRemote() { ... }Вывод:
@Transactional фиксирует границы транзакций,
@Retryable повышает надёжность интеграций.