java – MongoDB的Spring数据中的非阻塞查询?

我想通过 Spring Data使用 MongoDB’s Async Client API访问MongoDB来执行非阻塞数据库查询.

到目前为止,我只看到了返回的可能性

> java.util.concurrent.Future
> java.util.concurrent.CompletableFuture
> org.springframework.util.concurrent.ListenableFuture

并使用@Async注释查询方法,例如

public interface UserRepo extends Repository<User, Long> {

  @Async
  ListenableFuture<User> findByName(String name);

}

但是documentation明确指出实际的查询执行将发生在已提交给Spring TaskExecutor的任务中.所以它不是真正的非阻塞,而只是使用一个不能很好扩展的线程池来解耦我的线程.

因此我的问题是:

如何使用MongoDB异步驱动程序的NIO功能在非阻塞模式下执行查询?

到目前为止,我看到的唯一解决方法是摆脱Spring Data并使用Mongo Async Driver API实现我自己的数据库查询.但希望我只是遗漏了一些内容并且有一个直接的答案. 😉

最佳答案

So it's not really non-blocking but just decoupling my thread using a thread pool which doesn't scale very well.

非阻塞/异步意味着将任务委派给不同的线程而不使用调用线程来完成任务. Spring Data mongodb实现代表了它的主张.

但是你不能说它不会像你期望的那样扩展,因为你可以配置Spring TaskExecutor来满足你的扩展SLA.

记住Spring数据mongodb是一个抽象层,用于简单的开发生命周期,适用于大多数开发用例,并提供良好的非阻塞/异步执行.但是如果你认为你需要更多,那么你必须坚持使用MongoDB自己的Aync Client API.

点赞