如何通过Java连接Docker部署的Memgraph?程序运行失败求助
解决Memgraph与Java Neo4j驱动连接失败的问题
常见问题排查与修复步骤:
确认Docker端口映射:启动Memgraph容器时必须映射7687端口到主机,执行以下命令启动容器:
docker run -p 7687:7687 memgraph/memgraph若未映射,主机无法访问容器内的Bolt服务。
检查Bolt协议状态:Memgraph默认启用Bolt协议,可通过容器日志确认服务启动:
docker logs <你的Memgraph容器ID>日志中应包含
Bolt server is listening on 0.0.0.0:7687字样。依赖版本兼容性:Memgraph兼容Neo4j 4.x系列的Java驱动,确保项目依赖正确:
Maven配置(pom.xml):<dependency> <groupId>org.neo4j.driver</groupId> <artifactId>neo4j-java-driver</artifactId> <version>4.4.11</version> </dependency>Gradle配置(build.gradle):
implementation 'org.neo4j.driver:neo4j-java-driver:4.4.11'认证方式优化:Memgraph默认无需用户名密码,使用
AuthTokens.none()替代空字符串认证,代码更清晰且避免潜在问题。
修正后的可运行代码:
import org.neo4j.driver.*; import static org.neo4j.driver.Values.parameters; public class MemgraphHelloWorld implements AutoCloseable { private final Driver driver; public MemgraphHelloWorld(String uri) { // 使用无认证方式连接Memgraph driver = GraphDatabase.driver(uri, AuthTokens.none()); } @Override public void close() throws Exception { driver.close(); } public void createGreeting(String message) { try (Session session = driver.session()) { String result = session.writeTransaction(tx -> { Result res = tx.run( "CREATE (a:Greeting) SET a.message = $message RETURN 'Node ' + id(a) + ': ' + a.message", parameters("message", message) ); return res.single().get(0).asString(); }); System.out.println(result); } catch (Exception e) { // 打印异常信息,方便排查问题 e.printStackTrace(); } } public static void main(String[] args) throws Exception { try (MemgraphHelloWorld app = new MemgraphHelloWorld("bolt://localhost:7687")) { app.createGreeting("Hello, Memgraph!"); } } }
额外排查技巧:
- 测试端口连通性:执行
nc -zv localhost 7687(Linux/macOS)或使用PowerShell的Test-NetConnection localhost -Port 7687,确认端口可访问。 - 若仍失败,检查Memgraph配置文件
memgraph.conf,确保bolt-enabled=true且未修改默认端口。
内容的提问来源于stack exchange,提问作者KWriter
相关产品推荐
相关产品推荐

