Вызов REST-сервиса, который будет читать только что сохраненные данные
Проблема в том, что текущая транзакция не зафиксирована и вызываемый сервис их не видит. Я попытался разделить метод на несколько методов, имеющих собственную транзакцию.
Мой вариант использования: [list] [*]Чтение данных [*]Сохранение данных в БД [*]Вызов REST-сервиса, который будет читать только что сохраненные данные [/list] Проблема в том, что текущая транзакция не зафиксирована и вызываемый сервис их не видит. Я попытался разделить метод на несколько методов, имеющих собственную транзакцию. [code]@Service public class ReportService { private final MyFeignClient feignClient;
@EventListener @Transactional(propagation = Propagation.REQUIRED) public void handleUploadedFile(MyEvent event) { final var dataHeader = saveReportData(event); validate(dataHeader); }
@Transactional(propagation = Propagation.REQUIRES_NEW) public DataHeader saveReportData(MyEvent event) { var dataHeader = DataHeader.builder() .event(event) .createdTs(LocalDateTime.now()) .build(); return dataHeaderRepository.save(dataHeader); }
@Transactional(propagation = Propagation.REQUIRES_NEW) public void validate(DataHeader dataHeader) { try { final var response = feignClient.execute(ValidateRequest.builder() .dataHeaderId(dataHeader.getId()) .build()); } catch (Exception e) { log.error("Failed for DataHeader {}", e, dataHeader.getId()); } } } [/code] Я рассматриваю возможность управления транзакциями вручную, если не существует лучшего способа.