我正在使用spring-data-jpa
和spring webflux
。当我使用ReactiveCrudRepository
扩展UserRepository时。我遇到错误:
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对象。
答案 0 :(得分:1)
如果我使用CrudRepository扩展并使用Mono.just(data-from-db)和Flux.just(data-from-db)发送响应,那么一切都很好。
哇,那里-不,不是。您可能会认为一切都很好,但这是将阻止网络调用引入到响应式链中,一旦您并行运行几个调用,这将使速度变慢。更糟糕的是,您已经创建了一种“看起来”是反应性的方法,但不是-通常称为“冒名顶替的反应性方法”。
简单地说,将阻塞代码并使之具有响应性不可能-将其包装在Mono.just()
中是行不通的。该库必须从头开始异步构建。
坏消息是,据我所知,DynamoDB目前(2019年11月)尚无ReactiveCrudRepository
存储库支持,因此,如果您必须使用它,则会有点麻烦。 / p>
好消息是,亚马逊现在提供了asynchronous client for DynamoDB,您可以通过调用{{1}轻松地将CompleteableFuture
包裹在Mono
中}-因此您可以使用它来保持被动状态,并仍然具有DynamoDB支持。