Java 如何获得Neo4j的路径<;config storeDirectory="&引用&燃气轮机;在批插入器方法中?

Java 如何获得Neo4j的路径<;config storeDirectory="&引用&燃气轮机;在批插入器方法中?,java,neo4j,spring-data-neo4j,batch-insert,Java,Neo4j,Spring Data Neo4j,Batch Insert,我正在web应用程序中使用Neo4j 2.2.8和Spring数据。我正在使用xml配置我的数据库,如: <neo4j:config storeDirectory="S:\Neo4j\mybase" /> 但我正试图使用批处理插入器添加来自.txt文件的超过100万个节点。读取文件并设置对象列表后,我的批处理代码如下: public void batchInserter(List<Objects> objects) { BatchInserter inse

我正在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();
        }
    }
}
public void批插入器(列出对象){
BatchInserter-inserter=null;
试一试{
inserter=BatchInserters.inserter(“S:\\Neo4j\\mybase”);
Label movimentosLabel=DynamicLabel.Label(“Movimentos”);
createDeferedSchemaIndex(movimentosLabel).on(“documento”).create();
对于(对象对象对象:对象{
映射属性=新的HashMap();
properties.put(“documento”,objs.getDocumento());
long movimento=inserter.createNode(属性,movimentsLabel);
DynamicRelationshipType RelacionNameTo=DynamicRelationshipType.withName(“CONTA_MOVIMENTO”);
createRelationship(movimento,objs.getConta().getId(),relacionamento,null);
}
}最后{
如果(插入器!=null){
inserter.shutdown();
}
}
}
是否有可能在“插入器”中获取在xml中配置的数据库路径?因为在上述配置中,Neo4j会给我一个关于多个连接的错误。我可以设置一个属性来解决多个连接的错误吗?是否有人遇到过此问题,并且知道如何解决此问题?欢迎提出建议


谢谢大家!

你的问题有几个部分:

关于多个连接的错误

如果将spring数据与本地数据库绑定到特定目录或文件,请注意不能让两个neo4j进程同时打开同一个数据库。这意味着,如果您决定对同一文件/目录使用
BatchInserter
,在使用spring dat的JVM数据库正在运行。据我所知,没有办法解决这个问题。一种方法是不对文件使用批插入器,而是使用REST API进行插入

获取在我的xml中配置的数据库的路径

当然,有一种方法可以做到这一点,你必须这样做。我不能给你代码,因为这取决于你谈论的配置文件以及它的结构,但本质上应该有一种方法可以将正确的东西注入到你的代码中,并从注入的对象中读取XML文件的属性

但鉴于上述“多重连接”问题,这对您没有帮助

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

  • 不要同时运行spring应用程序和批处理插入器
  • 运行spring应用程序,但通过RESTAPI或其他方法进行插入,这样就不会出现多连接问题

  • 感谢编辑@Max Rasguido。抱歉我的英语。感谢@FrobberOfBits。批插入器始终需要与DB的新连接?无法获取当前连接并用于执行批插入器?我尝试使用REST API执行此操作,但此过程需要100万个节点和您的关系,大约1小时才能完成仅此而已-批插入器不需要与DB连接,它直接从文件打开,因此没有连接。因为它正在打开原始文件,所以不能让多个进程同时执行此操作。如果需要使用批插入器,您仍然可以执行此操作--只需关闭其他DB进程即可当你这么做的时候,你一次只能有一件事来访问文件。