【问题标题】:How to set Neo4J config keys in gremlin-scala?如何在 gremlin-scala 中设置 Neo4J 配置键?
【发布时间】:2016-07-29 17:08:20
【问题描述】:

在独立运行 Neo4J 数据库服务器时(在 Ubuntu 14.04 上),配置 optionsset 用于在 etc/neo4j/neo4j.conf 或可能是 $NEO4J_HOME/conf/neo4j.conf 中的全局安装。

但是,当使用 Apache 的 Neo4jGraph 类 (org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph) 从 Java 或 Scala 实例化 Neo4j 数据库时,没有全局安装,并且构造函数 (as far as I can tell) 不会查找任何配置文件。

特别是,在为我的应用程序运行测试套件时,我最终会同时出现许多 Neo4jGraph 实例,这最终会引发 java.net.BindException: Address already in use,因为所有这些实例都试图通过一小部分端口进行通信用于在线备份,我实际上并不需要。这些通道使用配置选项dbms.backup.address(默认值:127.0.0.1:6362-6372)和dbms.backup.enabled(默认值:true)进行设置。

我的问题可以通过将dbms.backup.enabled设置为false,或者扩大端口范围来解决。

没用的东西:

  • 创建包含dbms.backup.enabled=false 行的/etc/neo4j/neo4j.conf

  • 在我项目的src/main/resources 目录中创建相同的文件。

  • src/main/resources/neo4j中创建同一个文件。

  • 在 Scala 代码中手动设置配置属性:

val db = new Neo4jGraph(dataDirectory) db.configuration.addProperty("dbms.backup.enabled",false)

db.configuration.addProperty("neo4j.conf.dbms.backup.enabled",false)

db.configuration.addProperty("gremlin.neo4j.conf.dbms.backup.enabled",false)

我应该如何设置这个属性?

【问题讨论】:

    标签: apache scala neo4j gremlin gremlin-server


    【解决方案1】:

    Neo4jGraph 通过 TinkerPop 进行配置是通过配置密钥的传递来完成的。在 TinkerPop 3.x 中,这意味着通过 Configuration 对象提供给 Neo4jGraph.open()GraphFactory.open() 的所有前缀为 gremlin.neo4j.conf 的 Neo4j 密钥将直接传递给 Neo4j 实例。您可以在有关高可用性配置的 TinkerPop 文档中查看此 here 的示例。

    在 TinkerPop 2.x 中,采用了相同的方法,但密钥前缀改为 blueprints.neo4j.conf.*,如讨论的 here

    【讨论】:

    • 是否将配置键gremlin.neo4j.conf.dbms.backup.address 设置为0.0.0.0:6350-6359 会产生在该端口范围上侦听的实例?对我来说不是。
    【解决方案2】:

    在数据库连接已经打开后操作db.configuration肯定是徒劳的。

    stephen mallette 的答案是正确的,但是这个特定的配置似乎并没有像他的链接示例那样通过。 neo4j.conf 中预期的配置键与 org.neo4j.backup.OnlineBackupKernelExtension 中预期的配置键之间存在命名不匹配。该类查找配置键 online_backup_serveronline_backup_enabled,而不是 dbms.backup.addressdbms.backup.enabled

    我无法将这些密钥正确地传递给底层Neo4jGraphAPI 实例。相反,我必须做的是:

    import org.neo4j.tinkerpop.api.impl.Neo4jFactoryImpl
    import scala.collection.JavaConverters._
    
    val factory = new Neo4jFactoryImpl()
    val config = Map(
        "online_backup_enabled" -> "true",
        "online_backup_server" -> "0.0.0.0:6350-6359"
    ).asJava
    val db = Neo4jGraph.open(factory.newGraphDatabase(dataDirectory,config))
    

    通过此初始化,实例正确侦听端口 6350 上的备份;将 "true" 更改为 "false" 禁用备份监听。

    【讨论】:

      【解决方案3】:

      使用 Neo4j 3.0.0 以下为我禁用端口监听(Java 代码)

      import org.apache.commons.configuration.BaseConfiguration;
      import org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph;
      
      BaseConfiguration conf = new BaseConfiguration();
      conf.setProperty(Neo4jGraph.CONFIG_DIRECTORY, "/path/to/db");
      conf.setProperty(Neo4jGraph.CONFIG_CONF + "." + "dbms.backup.enabled", "false");
      graph = Neo4jGraph.open(config);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-25
        • 1970-01-01
        • 2016-09-11
        相关资源
        最近更新 更多