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

时间:2016-07-29 17:08:21

标签: apache scala neo4j gremlin gremlin-server

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

但是,当使用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或扩展端口范围来解决。

没有奏效的事情:

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

  • 在项目的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)

我该如何设置此属性?

3 个答案:

答案 0 :(得分:0)

通过TinkerPop进行的

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

在TinkerPop 2.x中,采用了相同的方法,但关键字前缀是blueprints.neo4j.conf.*,正如here所述。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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