在Java play中使用async mongo驱动程序

时间:2017-09-04 21:05:52

标签: java mongodb-java playframework-2.6

我正在使用mongo DB启动新的Java Play项目。我看了一下Play!文档,但没有mongo Java异步驱动程序。仅提到Scala反应驱动程序。 SO有许多类似的问题,但它们都已经过时了。

现在以异步方式处理mongo数据库的最佳方法是什么?

假设我只有一个包含订单的文档集合,我需要添加一个OrderController,它将从mongo返回所有订单。

1 个答案:

答案 0 :(得分:0)

最后我设法做到了。为其他程序员发布代码。代码使用异步驱动程序转到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;
    }
}