2017-09-04 269 views
0

我正在用mongo DB啓動新的Java Play項目。我看透了Play!文檔,但沒有mongo Java異步驅動程序。只提到Scala反應驅動程序。 SO有許多類似的問題,但都已過時。在Java中使用異步mongo驅動程序

現在以異步方式處理mongo數據庫的最佳方式是什麼?

比方說,我只有一個文檔集合的訂單,我需要添加一個OrderController,它將返回所有來自mongo的訂單。

回答

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; 
    } 
} 
相關問題