簡體   English   中英

通過螺栓公開嵌入式Neo4J OGM數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM