我正在使用本地Neo4j(2.1.12)服务器实例和Neo4j Java API从java程序(jdk 8.0_05)中访问图形数据库(gdb)。
我只想实现以下工作流程:
目前,第5点无效!
为了连接'我使用的gdb的Java程序'
gdbFactory = new GraphDatabaseFactory();
gdbService = gdbFactory.newEmbeddedDatabase(gdbPath);
gdbEngine = new ExecutionEngine(gdbService);
对于'断开'我使用的gdb中的Java程序
GraphDatabaseService.shutdown()
但是这个方法似乎以某种方式完成了gdb,我再也无法连接它了。
连接后,断开连接并再次连接后,我收到一个异常信息,告诉我:
此数据库已关闭!
所以,我的问题是:
连接的常用方法是什么 - 断开连接 - 重新连接到Neo4J gdb?上面有关闭方法的替代方法吗?
答案 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();
}