如何在批量插入器方法中获取我的 Neo4j <config storeDirectory=""> 的路径?

How can I get the path of my Neo4j <config storeDirectory=""> in a Batch Inserter method?

我在 Web 应用程序中使用 Neo4j 2.2.8 和 Spring 数据。我正在使用 xml 配置我的数据库,例如:

<neo4j:config storeDirectory="S:\Neo4j\mybase" />

但我正在尝试使用批量插入器添加来自 .txt 文件的超过 100 万个节点。读取文件并设置对象列表后,我的批处理代码如下:

public void batchInserter(List<Objects> objects) {

    BatchInserter inserter = null;
    try {
        inserter = BatchInserters.inserter("S:\Neo4j\mybase");            

        Label movimentosLabel = DynamicLabel.label("Movimentos");
        inserter.createDeferredSchemaIndex(movimentosLabel).on("documento").create();

        for (Objects objs : objects{                
            Map<String, Object> properties = new HashMap<>();
            properties.put("documento", objs.getDocumento());
            long movimento = inserter.createNode(properties, movimentosLabel);                

            DynamicRelationshipType relacionamento = DynamicRelationshipType.withName("CONTA_MOVIMENTO");
            inserter.createRelationship(movimento, objs.getConta().getId(), relacionamento, null);
        }
    } finally {
        if (inserter != null) {
            inserter.shutdown();
        }
    }
}

是否可以在 "inserter" 中获取我在 xml 中配置的数据库路径?因为使用上述配置 Neo4j 给我一个关于多个连接的错误。我可以设置一个属性来解决这个多连接的错误吗?有没有人遇到过这个问题并且知道如何解决?欢迎提出想法。

谢谢大家!

你的问题有几个部分:

Error About Multiple Connections

如果您将 spring-data 与绑定到特定目录或文件的本地数据库一起使用,请注意您不能让两个 neo4j 进程同时打开同一个数据库。这意味着如果您决定对同一个 file/directory 使用 BatchInserter,而使用 spring-data 数据库的 JVM 是 运行ning,则根本不会发生这种情况。我不知道有什么方法可以解决这个问题。一种选择是不对文件使用批量插入器,而是使用 REST API 进行插入。

get the path of my database configured in my xml

当然,有办法做到这一点,您必须 consult the relevant documentation。我无法为您提供代码,因为它取决于您正在谈论的配置文件及其结构,但本质上应该有一种方法可以在此处将正确的内容注入您的代码,并阅读 属性 从 XML 文件中提取对象。

但考虑到您上面提到的 "Multiple connections" 问题,这对您没有帮助。

大体上,我认为您的解决方案是:

  1. 不要 运行 您的 spring 应用和批量插入器同时使用。
  2. 运行 您的 spring 应用程序,但通过 REST API 或其他方法进行插入,因此不存在多重连接问题。