Как выполнить синхронизацию с «будущим» при извлечении данных из базы данных - PullRequest
0 голосов
/ 23 мая 2019

Есть асинхронная конструкция. Я хотел бы продолжить обработку после чтения из базы данных здесь. Я попытался использовать цикл while, как показано ниже, но этого не произошло. Бесконечный цикл. Если нет цикла while, он асинхронный, но у меня он не работает.

private XmlOperations fetchAttributeFromDB(RequestContext context, 
                   XmlOperations invCnclAttributes,String orderId) {

    String strSQL = "select bankStan,bankBatch,provBank from transactionHistory where orderId='"+orderId+"' limit 1";
    DBClientService dbClientService = DBClientService.getService(context);
    try {
        Future<List<JsonArray>> futureHistory = dbClientService.ExecuteQuery(strSQL);
        futureHistory.setHandler(sqlResult -> {
            List<JsonArray> result = futureHistory.result();
            invCnclAttributes.addAttribute("bankStan", result.get(0).getString(0));
            invCnclAttributes.addAttribute("bankBatch", result.get(0).getString(1));
            invCnclAttributes.addAttribute("provBank", result.get(0).getString(2));
            futureHistory.complete();
        });
        while(!futureHistory.isComplete());
    }catch(Exception e){
        e.printStackTrace();
    }
    return invCnclAttributes;
}

1 Ответ

0 голосов
/ 23 мая 2019

Вы не говорите, можете ли вы использовать Java 8 (который поддерживает CompletableFuture и Streams) или Java 9 (который также поддерживает «Реактивный» API потока).

Предположим, вы можете использовать Java 8 ичувствую себя достаточно комфортно с Futures.

Тогда вы хотите использовать CompletableFuture.И, как указал Тило, вы определенно хотите использовать thenApply или thenCompose для составления вашего списка.

В условиях NO вы хотите использовать«цикл опроса», если вы вообще можете его избежать.

Вот отличное короткое руководство, которое расскажет вам об основных понятиях и даст пример кода:

Baeldung: Руководство по CompletableFuture

Вот книга, которую я лично нашел очень полезной для понимания новых API параллелизма Java:

Современная Java в действии: лямбды, потоки, функциональное и реактивное программирование 2-е издание

<= 2-е издание также охватывает Java 9 и Java 10 </p>

...