Java 在非阻塞I/O环境(如Vert.x 3)中使用morphia的正确方法
我目前正准备用Vert.X3实现(mongoDb的官方Java ORM),但看起来所有的查询和调用都是同步完成的,可以阻止Vert.X3的eventloop 如何将此查询转换为非阻塞代码集Java 在非阻塞I/O环境(如Vert.x 3)中使用morphia的正确方法,java,mongodb,morphia,vert.x,Java,Mongodb,Morphia,Vert.x,我目前正准备用Vert.X3实现(mongoDb的官方Java ORM),但看起来所有的查询和调用都是同步完成的,可以阻止Vert.X3的eventloop 如何将此查询转换为非阻塞代码集 DBObject query = BasicDBObjectBuilder.start() .add("albums", new BasicDBObject("$elemMatch",
DBObject query = BasicDBObjectBuilder.start()
.add("albums",
new BasicDBObject("$elemMatch",
new BasicDBObject("$and", new BasicDBObject[] {
new BasicDBObject("albumId", albumDto.getAlbumId()),
new BasicDBObject("album",
new BasicDBObject("$exists", false))
})))
.get();
Query<Artist> findQuery = datastore.createQuery(Artist.class, query);
Artist result = findQuery.get();
DBObject query=basicdbobobjectbuilder.start()
.add(“相册”,
新的BasicDBObject($elemMatch),
新BasicDBObject(“$and”,新BasicDBObject[]{
新的BasicDBObject(“albumId”,albumDto.getAlbumId()),
新的BasicDBObject(“专辑”,
新的BasicDBObject(“$exists”,false))
})))
.get();
Query findQuery=datastore.createQuery(Artist.class,Query);
艺术家结果=findQuery.get();
如果要在Vert.x中使用同步代码,您有两个选项:
- 使用工人垂直杆
- 在
closure中包装调用executeBlocking
executeBlocking
的所有信息。以您的示例为例,它将类似于:
DBObject query = ... // your definition is probably non blocking
vertx.executeBlocking(future -> {
// Call blocking API that takes a significant amount of time to return
Artist result = findQuery.get();
future.complete(result);
}, res -> {
System.out.println("The artist is: " + res.result());
});
如果要在Vert.x中使用同步代码,您有2个选项:
- 使用工人垂直杆
- 在
closure中包装调用executeBlocking
executeBlocking
的所有信息。以您的示例为例,它将类似于:
DBObject query = ... // your definition is probably non blocking
vertx.executeBlocking(future -> {
// Call blocking API that takes a significant amount of time to return
Artist result = findQuery.get();
future.complete(result);
}, res -> {
System.out.println("The artist is: " + res.result());
});
太棒了,谢谢你。我使用了ExecutingBlock。如果你想完全异步,那么我建议看看mongo客户端,它使用mongodb异步驱动程序,但是你失去了ORM的功能:)听起来不错,不幸的是ORM目前对我来说太重要了。mongo客户端要求我编写更多的代码和JsonObject选项。非常感谢。我使用了ExecutingBlock。如果你想完全异步,那么我建议看看mongo客户端,它使用mongodb异步驱动程序,但是你失去了ORM的功能:)听起来不错,不幸的是ORM目前对我来说太重要了。mongo客户端要求我编写更多的代码和JsonObject选项。