Что происходит с транзакцией, когда хранилище вызывается из завершаемого метода поставки в будущем? - PullRequest
0 голосов
/ 28 сентября 2018

Мой вопрос: как транзакция будет вести себя в таком коде?

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void test(List<Long> ids) {
    List<CompletableFuture> list = ids.stream().parallel()
            .map(id -> build(id))
            .collect(Collectors.toList());
    // other logic
}

private CompletableFuture build(Long id) {
    return CompletableFuture.supplyAsync(() -> Calculation.builder().id(id).build(), someExecutor)
            .thenApply(calculationRepository::save);
}

Я думаю, что она сломается, потому что а) закрытый метод б) другие потоки

Есть ли способсохранить мою транзакцию?(пример кода синтетический, но концепция должна быть ясной)

...