gpt4 book ai didi

java - 通过 Bolt 公开嵌入式 Neo4J OGM 数据库

转载 作者:行者123 更新时间:2023-12-02 10:12:23 27 4
gpt4 key购买 nike

我将 Neo4J 嵌入式数据库与 OGM 结合使用,并通过 OGM SessionFactory 在目录中创建数据库服务:

Configuration configuration = new Configuration.Builder()
.uris("C:\neoEmbeddedDb")
.build();

factory = new SessionFactory(configuration, packages);

这很好用,但现在我想使用 Neo4J 浏览器工具浏览创建的数据库。正如我所读到的,我必须通过 Bolt 公开我的数据库才能访问它。

Neo4J Embedded documentation ,他们使用 GraphDatabaseService 并简单地指定一个额外的 Bolt 驱动程序来公开数据库:

GraphDatabaseService graphDb = new GraphDatabaseFactory()
.newEmbeddedDatabaseBuilder( DB_PATH )
.setConfig( bolt.type, "BOLT" )
.setConfig( bolt.enabled, "true" )
.setConfig( bolt.address, "localhost:7687" )
.newGraphDatabase();

但不幸的是,我在使用 OGM SessionFactory 时没有这个选项。我尝试使用多个 URI 调用配置生成器:

Configuration configuration = new Configuration.Builder()
.uris(new String[]{this.databasePath.toUri().toString(), "localhost:7687"})
.build();

但它似乎忽略了第一个 URI(我的文件位置),而是在临时位置创建数据库。

调试输出将相应的消息记录到控制台:

Creating temporary file store: file:/C:/Temp/neo4jTmpEmbedded.db2736315981519762299/database/

谁能解释一下我如何通过 Bolt 公开我的嵌入式数据库或使用 Neo4J 浏览器访问它?

非常感谢!

<小时/>

解决方案

在 meistermeier 的帮助下,我能够创建一个真正的嵌入式数据库并将我的 OGM 连接到它。我添加了 bolt 连接选项,因为我在文档中找到了它们。现在,数据库已创建并通过 Bolt 正确公开。我可以连接我的 Neo4J 桌面 Windows 浏览器。

最终代码为

BoltConnector boltConnector = new BoltConnector(_BOLT_CONNECTION_STRING);

GraphDatabaseService graphDb = new GraphDatabaseFactory()
.newEmbeddedDatabaseBuilder(databasePath.toFile())
.setConfig(boltConnector.type, "BOLT" )
.setConfig(boltConnector.enabled, "true" )
.setConfig(boltConnector.listen_address, "localhost:7687" )
.setConfig(GraphDatabaseSettings.auth_enabled, "false")
.newGraphDatabase();

registerShutdownHook(graphDb);

// connect OGM session factory to embedded database
EmbeddedDriver driver = new EmbeddedDriver(graphDb);
final String[] packages = new String[] {
"Entity domain package",
};

factory = new SessionFactory(driver, packages);

最佳答案

首先:Neo4j-OGM 除了创建与数据库的连接之外,不负责任何更复杂的数据库启动。提供具有自定义配置的 Neo4j 实例将使您的应用程序负责正确设置它。

其次:你想要实现的目标是不可能的。至少不存在为 Neo4j 浏览器提供服务的另一个服务器实例,该浏览器一旦启动就可以连接到任何 Bolt 协议(protocol)服务器。您可以启动嵌入式实例,如果您确实需要,请打开 bolt 端口。但不会部署内置的 Neo4j 浏览器。

但毕竟让我解释一下为什么您会看到临时数据库文件夹消息:在您的设置片段中,我可以看到创建了两个实例:一个是通过创建 GraphDatabaseService 的显式实例,另一个是通过配置创建。第一个很明显,第二个就不那么明显了。我只是假设您没有使用 Neo4j-OGM 的最新版本(在撰写此答案时为 3.1.8)。

方法/参数uris仅适用于有关因果集群和路由的附加uri(3.1.8之前的版本)。您必须将 uri 与单个 uri 一起使用(bolt://....file:///... )在你的情况下。在未定义 uri 的情况下,Neo4j-OGM 的行为是回退到临时嵌入实例。

此问题的另一个解决方案是不为 SessionFactory 提供 Configuration,而是提供 EmbeddedDriver 实例。这可以包装已经配置的GraphDatabaseService,如new SessionFactory(new EmbeddedDriver(graphDatabaseService), ...)。然后你就会有暴露的 bolt 端口,但不幸的是没有正在运行的浏览器。

关于java - 通过 Bolt 公开嵌入式 Neo4J OGM 数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54907818/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com