我正在使用带有 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 database
EmbeddedDriver driver = new EmbeddedDriver(graphDb);
final String[] packages = new String[] {
"Entity domain package",
};
factory = new SessionFactory(driver, packages);