如何在批量插入方法中获取Neo4j <config storedirectory =“”>的路径?

时间:2016-01-27 13:43:01

标签: java neo4j spring-data-neo4j batch-insert

我在Web应用程序中使用Neo4j 2.2.8和Spring Data。我正在使用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();
        }
    }
}

是否可以在“插件”中的xml中配置我的数据库路径?因为使用上面的配置,Neo4j给出了一个关于多个连接的错误。我可以设置属性来解决多个连接的错误吗?有谁有这个问题,并有任何想法如何解决它?欢迎提出意见。

感谢大家!

1 个答案:

答案 0 :(得分:0)

你的问题有几个部分:

  

关于多个连接的错误

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

  

获取在我的xml

中配置的数据库的路径

当然,有办法做到这一点,你必须consult the relevant documentation。我不能给你代码,因为它取决于你在说什么配置文件以及它是如何构造的,但实质上应该有一种方法在这里向你的代码注入正确的东西,并从中读取属性注入对象的XML文件。

但鉴于上述“多重连接”问题,这对您无济于事。

从广义上讲,我认为您的解决方案是:

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