如何从嵌入式Neo4j数据库中获取隐式端口?

时间:2017-11-16 14:33:14

标签: java neo4j

鉴于有人启动嵌入式数据库:

BoltConnector boltConnector = new BoltConnector("bolt");
new GraphDatabaseFactory()
  .newEmbeddedDatabaseBuilder(Files.createTempDirectory("part-relasjon").toFile())
  .setConfig(boltConnector.enabled, "true")
  .setConfig(boltConnector.type, "BOLT")
  .setConfig(boltConnector.listen_address, "localhost:0")
  .newGraphDatabase();

如何获取数据库绑定的端口?我想创建一个Driver来连接数据库:

GraphDatabase.driver("bolt://localhost:?")

我这样做是为了在特定的应用程序配置文件中运行集成测试。现在,我手动找到一个自由端口并将服务器和驱动程序绑定到它,但我正在寻找一种从随机选择的端口中提取它的方法,因为它看起来像是更清洁的解决方案。我查看了测试包中的Neo4jRule以了解它是如何在那里完成的,但是后者引导服务器的内容比上面的代码复杂得多,这就是为什么我要避免它。

1 个答案:

答案 0 :(得分:-1)

这是以下文档中的示例:https://neo4j.com/docs/java-reference/3.3/#tutorials-java-embedded-bolt

7687

如您所见,您可以在此处定义端口(此处为InetSocketAddress address = new InetSocketAddress( 'localhost', 7687 ); new ServerSocket( addres.getPort(), 100, address.getAddress() ).close(); ,默认端口)。

您可以通过类似的方式在java中找到自由端口:

3.3

如果您遇到异常,则端口不是免费的。

似乎自版本0以来,您可以将server.getDependencyResolver().resolveDependency( ConnectorPortRegister.class ).getLocalAddress( "bolt" ).getPort(); 定义为任何连接器的端口,Neo4j将找到一个空闲端口。

要知道端口,可以试试这个java代码(来自这里:https://github.com/neo4j/neo4j/blob/3.4/community/neo4j-harness/src/main/java/org/neo4j/harness/internal/InProcessServerControls.java):

getProductExternal(code: string): Observable<ProductVM> {
    return this.http.get("api/product?productCode=" + code)
        .map(data => {
            this.externalProduct = <ProductVM>data;
            console.log("DATA: " + this.externalProduct);
            return data;
        });    
}

干杯