鉴于有人启动嵌入式数据库:
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
以了解它是如何在那里完成的,但是后者引导服务器的内容比上面的代码复杂得多,这就是为什么我要避免它。
答案 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;
});
}
干杯