[英]Exposing embedded Neo4J OGM database via bolt
我正在將Neo4J嵌入式數據庫與OGM一起使用,並通過OGM SessionFactory在目錄中創建數據庫服務:
Configuration configuration = new Configuration.Builder()
.uris("C:\neoEmbeddedDb")
.build();
factory = new SessionFactory(configuration, packages);
這很好用,但是現在我想用Neo4J Browser Tool瀏覽創建的數據庫。 如我所讀,我必須通過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連接選項,因為它們在文檔中找到了。 現在,數據庫已創建並通過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協議服務器。 您可以啟動一個嵌入式實例,如果確實需要,可以打開螺栓端口。 但是,不會部署內置的Neo4j瀏覽器。
但畢竟讓我解釋一下為什么您看到臨時DB文件夾消息:在安裝摘要中,我可以看到創建了兩個實例:一個通過創建GraphDatabaseService
的顯式實例,另一個通過配置來創建。 第一個很明顯,第二個沒有那么多。 我只是假設您沒有使用Neo4j-OGM的最新版本(撰寫此答案時為3.1.8)。
方法/參數uris
僅用於與因果群集和路由有關的uri(3.1.8之前)。 在這種情況下,您必須將uri
與單個uri一起使用(或者bolt://....
或file:///...
)。 在未定義uri
的情況下,Neo4j-OGM的行為將退回到臨時的嵌入式實例。
解決此問題的另一種方法是不提供Configuration
而是為SessionFactory
提供EmbeddedDriver
實例。 這可以包裝像new SessionFactory(new EmbeddedDriver(graphDatabaseService), ...)
這樣的已配置GraphDatabaseService
。 然后,您將擁有裸露的螺栓端口,但是不幸的是,沒有正在運行的瀏覽器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.