Я пытаюсь реализовать асин 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". Что я тут не так делаю?