如何在 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
或扩大端口范围来解决。
没有成功的事情:
创建 /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)
我应该如何设置这个 属性?
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.address
和 dbms.backup.enabled
,class 查找配置键 online_backup_server
和 online_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);
当 运行 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
或扩大端口范围来解决。
没有成功的事情:
创建
/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)
我应该如何设置这个 属性?
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.address
和 dbms.backup.enabled
,class 查找配置键 online_backup_server
和 online_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);