Java Болт Драйвер дает неверные результаты при использовании с asyn c сеанс neo4j - PullRequest
0 голосов
/ 17 марта 2020

Я пытаюсь реализовать асин c сеансы в Neo4j с драйвером java, и они дают мне беспристрастные результаты. Вот мой код

    public static void main(String[] args) {
        executor = new BoltCypherExecutor("bolt://neo4j:1234@localhost","neo4j","1234");

        List<String> strings = new ArrayList<>();
        for(int i = 0;i < 10;i++) {
            strings.add("i" + i);
        }
        Map<String,Object> params = new HashMap<>();
        String CREATE_NODE = "CREATE (:Person{personName: {personName} })";
        for(String string : strings) {
            params.put("personName", string);
            executor.writeQueryAsync(CREATE_NODE,params);
        }
    }

Вот исполнитель, напишите asyn c Функция:

    public CompletionStage<ResultSummary> writeQueryAsync(String statement, Map<String, Object> params) {
        AsyncSession asyncSession = driver.asyncSession();

        return asyncSession.writeTransactionAsync(tx ->
                tx.runAsync(statement,params)
                        .exceptionally(ex -> {
                            log.error("Exception while writing queries async:{}",ex);
                            return null;
                        })
                .thenCompose(resultCursor -> resultCursor.consumeAsync()))
                .exceptionally((ex -> {
                    log.error("Exception while writing queries async1:{}",ex);
                    return null;
                }));
    }

Так что это происходит от меня, каждый узел (Person), созданный со свойством (personName), имеет значение " i9" . Но если я выполняю это синхронно, создаваемые узлы верны. Вот синтаксис c code

    public ResultSummary writeQuery(String statement, Map<String, Object> params) {
        try(Session session = driver.session()) {
            return session.writeTransaction(tx ->
                    tx.run(statement,params)
                            .consume());
        }catch(ClientException e) {
            log.error("Exception caught while writing sync:{}",e);
        }catch(DatabaseException e) {
            log.error("Exception caught while writing sync1:{}",e);
        }
        return null;
    }

Здесь узлы создаются с правильными свойствами (personName), т.е. "i1", "i2", ..., "i9". Что я тут не так делаю?

...