Я использую oracleDB иasticsearch для персистентности и, если что-то пойдет не так в этом методе, он генерирует пользовательское исключение.Теперь мне нужно откатиться из БД, если какая-то вещь не работает в упругой тоже.
Я уже добавил аннотацию @transactional для классов обслуживания.И все, что я нашел в сети.
@Transactional(rollbackOn = BaseException.class)
public void transaction(ab ab, a a) {
persistenceService.save(a);
persistenceService.updateSignalCountDb(a.abc(), a.bcd(), ab);
elasticService.saveSignal(a);
try {
elasticService.updateSignalCountElastic(a);
} catch (Exception e) {
throw new BaseException(ErrorCodes.FAILED_ELASTIC_SEARCH_UPDATE, e);
}
}
persistenceService.save () сохраняет в db.Метод persistenceService.updateSignalCountDb () обновляет другую таблицу в БД.МетодasticService.saveSignal () сохраняет в эластик.выдает базовое исключение в случае сбоя.МетодasticService.updateSignalCountElastic () обновляет другой индекс в упругом.Он также вызывает методasticService.delete () для удаления всего, что было сохранено вastic, в случае сбоя и выдает базовое исключение.
Я ожидал, что это сработает в случае любого сбоя во всем методе.Но если что-то не получается на эластичном, я получаю базовое исключение, но мои данные из oracle db не откатываются.