在java play中使用异步mongo驱动程序

scyqe7ek  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(378)

我开始与mongodb合作新的javaplay项目。我看穿了游戏!文档,但没有mongojava异步驱动程序。只提到了scalaReact驱动程序。类似的问题也有很多,但都过时了。
现在以异步方式处理mongodb的最佳方法是什么?
假设我只有一个带有订单的文档集合,我需要添加一个ordercontroller,它将从mongo返回所有订单。

dm7nw8vv

dm7nw8vv1#

我终于做到了。为其他程序员发布代码。代码使用异步驱动程序进入mongo并返回带有数据库名称的json。

public class MyController extends Controller {

    public CompletionStage<Result> getDBNames() throws InterruptedException {
        CompletionStage<List<String>> mongoDBNames = new MongoServiceWithPromises().getMongoDBNames();
        return mongoDBNames.thenApply(stringListToJson);
    }

    Function<List<String>, Result> stringListToJson = obj -> {
        JsonNode jsonNode = Json.toJson(obj);
        return ok(jsonNode);
    };
}

public class MongoServiceWithPromises {
    // Open the client
    private MongoClient mongoClient = MongoClients.create(new ConnectionString("mongodb://localhost:27017"));

    public CompletionStage<List<String>> getMongoDBNames() {
        final CompletableFuture<List<String>> future = new CompletableFuture<>();

        final SingleResultCallback<List<String>> callback = (dbNames, cb) -> {
            if (cb == null) {
                future.complete(dbNames);
            } else {
                future.completeExceptionally(cb);
            }
        };
        mongoClient.listDatabaseNames().into(new ArrayList<>(), callback);
        return future;
    }
}

相关问题