0
我正在用mongo DB啓動新的Java Play項目。我看透了Play!文檔,但沒有mongo Java異步驅動程序。只提到Scala反應驅動程序。 SO有許多類似的問題,但都已過時。在Java中使用異步mongo驅動程序
現在以異步方式處理mongo數據庫的最佳方式是什麼?
比方說,我只有一個文檔集合的訂單,我需要添加一個OrderController,它將返回所有來自mongo的訂單。
我正在用mongo DB啓動新的Java Play項目。我看透了Play!文檔,但沒有mongo Java異步驅動程序。只提到Scala反應驅動程序。 SO有許多類似的問題,但都已過時。在Java中使用異步mongo驅動程序
現在以異步方式處理mongo數據庫的最佳方式是什麼?
比方說,我只有一個文檔集合的訂單,我需要添加一個OrderController,它將返回所有來自mongo的訂單。
最後,我設法做到了。發佈其他程序員的代碼。代碼使用異步驅動程序進入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;
}
}