Как конвертировать обычный CrudRepositoryв ReactiveCrudRepository - PullRequest
2 голосов
/ 11 ноября 2019

Я использую spring-data-jpa и spring webflux. Когда я расширяю свой UserRepository с ReactiveCrudRepository. я получаю сообщение об ошибке ниже:

org.springframework.dao.InvalidDataAccessApiUsageException: Reactive Repositories are not supported by DynamoDB. Offending repository is com.poc.crud.repository.EmployeeRepository!

Если я добавлю CrudRepository и отправлю ответ с Mono.just(data-from-db) и Flux.just(data-from-db), то все в порядке.

Мой вопросКак я могу создать собственный универсальный ReactiveCrudRepository<T,ID>, чтобы все методы crud возвращали объекты Mono и Flux.

1 Ответ

1 голос
/ 11 ноября 2019

Если я расширяю с CrudRepository и отправляю ответ с Mono.just (data-from-db) и Flux.just (data-from-db), тогда все в порядке.

Ух ты - нет, это не так. Вы могли бы подумать , что все в порядке, но это вводит блокирующие веб-вызовы в реактивную цепочку, которая ужасно замедлит процесс, как только у вас будет несколько параллельных вызовов. Хуже того, вы создали метод, который «выглядит» реактивным, но не таковым - обычно известным как «метод самозванца».

Проще говоря, невозможно принятьблокировать код и сделать его реактивным - обернуть его в Mono.just() не работает. Библиотека должна быть построена асинхронно с нуля.

Плохая новость заключается в том, что, насколько я знаю, в настоящее время (ноябрь 2019 г.) нет поддержки ReactiveCrudRepository хранилища для DynamoDB, так что если выпридется использовать это, вы немного застряли.

Хорошая новость заключается в том, что Amazon теперь предоставляет асинхронный клиент для DynamoDB , и вы можете легко обернутьCompleteableFuture в Mono, позвонив по номеру Mono.fromFuture() - чтобы вы могли использовать это, чтобы оставаться реактивным и при этом иметь поддержку DynamoDB.

...