为了账号安全,请及时绑定邮箱和手机立即绑定

通过 bolt 暴露嵌入式 Neo4J OGM 数据库

通过 bolt 暴露嵌入式 Neo4J OGM 数据库

达令说 2022-07-14 08:59:42
我正在使用带有 OGM 的 Neo4J 嵌入式数据库,并通过 OGM SessionFactory在目录中创建数据库服务:Configuration configuration = new Configuration.Builder()                .uris("C:\neoEmbeddedDb")                .build();        factory = new SessionFactory(configuration, packages);这很好用,但现在我想用 Neo4J 浏览器工具浏览创建的数据库。当我阅读时,我必须通过 Bolt 公开我的数据库才能访问它。在Neo4J Embedded 文档中,他们使用GraphDatabaseService并简单地指定一个额外的螺栓驱动程序来公开数据库: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/谁能解释我如何通过螺栓公开我的嵌入式数据库或使用 Neo4J 浏览器以其他方式访问它?非常感谢!解决方案在 meistermeier 的帮助下,我能够创建一个真正的 EmbeddedDatabase 并将我的 OGM 连接到它。我添加了螺栓连接选项,因为我在文档中找到了它们。现在,数据库已创建并通过 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 databaseEmbeddedDriver driver = new EmbeddedDriver(graphDb);final String[] packages = new String[] {        "Entity domain package",};factory = new SessionFactory(driver, packages);
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

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

其次:你想要达到的目标是不可能的。至少不会使用另一个服务于 Neo4j 浏览器的服务器实例,一旦启动就可以连接到任何 Bolt 协议服务器。您可以启动一个嵌入式实例,如果您真的需要,请打开螺栓端口。但是不会部署内置的 Neo4j 浏览器。

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

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

Configuration此问题的另一种解决方案是不EmbeddedDriverSessionFactory. 这可以包装已经配置的GraphDatabaseServicelike new SessionFactory(new EmbeddedDriver(graphDatabaseService), ...)。然后你会有暴露的螺栓端口,但不幸的是没有一个正在运行的浏览器。


查看完整回答
反对 回复 2022-07-14
  • 1 回答
  • 0 关注
  • 126 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信