如何连接 - 断开连接 - 重新连接到Neo4j服务器实例

时间:2014-11-22 01:00:23

标签: java neo4j

我正在使用本地Neo4j(2.1.12)服务器实例和Neo4j Java API从java程序(jdk 8.0_05)中访问图形数据库(gdb)。

我只想实现以下工作流程:

  1. 从Java程序连接到gdb
  2. 与gdb断开连接
  3. 将另一个进程连接到同一个gdb
  4. 与此进程中的gdb断开连接
  5. 再次使用Java程序连接到gdb
  6. 目前,第5点无效!

    为了连接'我使用的gdb的Java程序'

    gdbFactory = new GraphDatabaseFactory();
    gdbService = gdbFactory.newEmbeddedDatabase(gdbPath);
    gdbEngine = new ExecutionEngine(gdbService);
    

    对于'断开'我使用的gdb中的Java程序

    GraphDatabaseService.shutdown()
    

    但是这个方法似乎以某种方式完成了gdb,我再也无法连接它了。

    连接后,断开连接并再次连接后,我收到一个异常信息,告诉我:

    此数据库已关闭!

    所以,我的问题是:

    连接的常用方法是什么 - 断开连接 - 重新连接到Neo4J gdb?上面有关闭方法的替代方法吗?

2 个答案:

答案 0 :(得分:1)

您必须重新创建graphdatabaseService变量的新实例。

graphDatabaseService = new GraphDatabaseFactory().newEmbeddedDatabase(PATH);

或者使用Neo4j服务器并远程连接,您不必断开"断开"但是整个网络的速度会慢一些。

答案 1 :(得分:0)

这是一个测试,证明你正在尝试做的事(以及迈克尔建议的)正常工作。

它创建一个节点,然后关闭数据库,然后再次启动它并验证节点是否存在。

@Test
public void startStopRestart() {
    GraphDatabaseService db = new GraphDatabaseFactory().newEmbeddedDatabase("/tmp/db");

    try (Transaction tx = db.beginTx()) {
        Node node = db.createNode();
        node.setProperty("name", "First Node");
        tx.success();
    }

    db.shutdown();

    db = new GraphDatabaseFactory().newEmbeddedDatabase("/tmp/db");

    try (Transaction tx = db.beginTx()) {
        assertEquals("First Node", db.getNodeById(0).getProperty("name"));
    }

    db.shutdown();
}