【发布时间】:2020-03-06 22:28:13
【问题描述】:
我正在使用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 对象。
【问题讨论】:
-
由于错误提到 DynamoDB 不支持反应式。使用调节器存储库,您可以返回
Mono或Flux,但它只会被异步处理,它不是完全反应式的。响应式 DB 支持仅适用于小范围的 DB 产品,而不适用于阻塞访问的全部范围。 -
谢谢,有一个响应式库
r2dbc,但我仍然愿意从普通CrudRepository编写我自己的响应式实现 -
你不能因为那是阻塞的。此外,您不想走上编写自己的反应式实现的道路。只要您在底层使用 JDBC,就无法创建反应式实现,您需要为此重新发明 R2DBC。
-
如果我使用
Mono.just()包装数据库响应,这仍然是阻塞代码吗? -
是的,因为底层调用被阻塞。 JDBC 是阻塞的,不管你用反应类型包装了多少,它下面都是阻塞的。因此,如果没有适当的响应式驱动程序(如 R2DBC),代码仍然会阻塞。
标签: spring spring-boot spring-data-jpa spring-webflux project-reactor