События Spring Reactive и транзакционный контекст - PullRequest
0 голосов
/ 06 мая 2018

Я перевожу одно существующее приложение из традиционной модели Spring MVC в Spring Reactive. Мой первый рефакторинг позволил мне с этим фрагментом кода:

return Mono.fromSupplier(() -> visitRequestDao.findById(requestId).get())
            .map(request ->  request.approve())
            .map(request -> ResponseEntity.ok(listOfPendingVisitRequest(owner)));

После выполнения конечной точки я заметил, что у моей сущности не изменилось состояние. Как пользователь Hibernate, я знаю, что при загрузке какого-либо объекта любое примененное изменение будет отражено в базе данных после фиксации. Я предположил, что событие выполнялось в другом потоке. Я немного изменил код.

return Mono.fromSupplier(() -> visitRequestDao.findById(requestId).get())
            .map(request -> transactionalContext.execute(() -> request.approve()))
            .map(request -> ResponseEntity.ok(listOfPendingVisitRequest(owner)))

Класс TransactionalContext создан и помечен как транзакционный. Итак, теперь я знаю, что каждый раз, когда вызывается его метод, будет запущена новая транзакция или будет использована текущая. Это правильный подход? Есть ли решение?

...