如何在 gremlin-scala 中设置 Neo4J 配置键?

How to set Neo4J config keys in gremlin-scala?

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

但是,当使用 Apache 的 Neo4jGraph class (org.apache.tinkerpop.gremlin.neo4j.structure.Neo4jGraph) 从 Java 或 Scala 实例化 Neo4j 数据库时,没有全局安装,构造函数会not (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 或扩大端口范围来解决。

没有成功的事情:

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)

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

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

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

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

stephen mallette 的回答是正确的,但这个特定的配置似乎并没有像他的链接示例那样通过。 neo4j.conf 中预期的配置键与 org.neo4j.backup.OnlineBackupKernelExtension 中预期的配置键之间存在命名不匹配。而不是 dbms.backup.addressdbms.backup.enabled,class 查找配置键 online_backup_serveronline_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" 禁用备份侦听。

以下使用 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);