Встречается на собеседованиях • сегодня
Как реализовать транзакционный метод при наличии в бизнес-логике взаимодействия с двумя базами данных
Для работы с транзакциями в нескольких БД можно использовать JTA (Java Transaction API) или паттерн "Saga". Вот пример с JTA:
java
@Transactional
public void transferBetweenDbs() {
// Работа с первой БД
jdbcTemplate1.update("UPDATE account SET balance = balance - 100 WHERE id = 1");
// Работа со второй БД
jdbcTemplate2.update("UPDATE account SET balance = balance + 100 WHERE id = 2");
}Ключевые моменты:
- Аннотация
@Transactionalиз Spring (или@TransactionAttributeв JTA) - Настройка JTA-менеджера транзакций (Atomikos, Bitronix)
- Конфигурация DataSource'ов как XA-ресурсов
Альтернатива - паттерн Saga:
- Разбиваем операцию на этапы
- Для каждого этапа создаем компенсирующее действие
- Реализуем механизм отката при ошибках
Пример Saga:
java
public void transfer() {
try {
step1(); // debit from DB1
step2(); // credit to DB2
} catch (Exception e) {
compensateStep1(); // rollback DB1
throw e;
}
}
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы