我想通过Spring Data使用MongoDB的Async Client API访问MongoDB来执行非阻塞数据库查询。
到目前为止,我只看到了返回
-
java.util.concurrent.Future
-
java.util.concurrent.CompletableFuture
-
org.springframework.util.concurrent.ListenableFuture
并用@Async
注释查询方法,例如
公共接口 UserRepo 扩展了 Repository<User,> { @Async ListenableFuturefindByName(String name);}
但文档清楚地指出,实际[...] query execution will occur in a task that has been submitted to a Spring TaskExecutor
.所以它并不是真正的非阻塞,而只是使用不能很好地扩展的线程池解耦我的线程。
因此,我的问题:
如何使用MongoDB异步驱动程序的NIO功能在非阻塞模式下执行查询?
到目前为止,我看到的唯一解决方法是摆脱 Spring 数据并使用 Mongo 异步驱动程序 API 自己实现数据库查询。但希望我只是错过了一些东西,并且有一个向前的答案。;)
从Spring Data Kay M1开始,终于引入了一个响应式API,允许使用ReactiveCrudRepository接口进行非阻塞数据访问。
Spring团队有一篇很好的博客文章。
现在在 Spring 数据文档中也提到了它,但请记住,如果您已经使用 @Async 功能启动了项目,请不要将其与新的反应式 API 混合,因为文档明确指出:"异步查询执行不同于反应式查询执行,不应混合使用。