我使用本地Neo4j (2.1.12)服务器实例和Neo4j Java从java程序(jdk 8.0_05)中访问图形数据库(gdb)。
我只想实现以下工作流:
现在,第5点不起作用了!
为了将Java程序“连接”到我使用的gdb,
gdbFactory = new GraphDatabaseFactory();
gdbService = gdbFactory.newEmbeddedDatabase(gdbPath);
gdbEngine = new ExecutionEngine(gdbService);为了“断开”Java程序与gdb的连接,我使用
GraphDatabaseService.shutdown()但是,这个方法似乎以某种方式最终完成了gdb,因此我无法再连接到它。
在连接、断开和再次连接之后,我得到了一个异常,它告诉我:
这个数据库关闭了!
所以,我的问题是:
连接-断开连接-重新连接到Neo4J gdb的常见方式是什么?除了上面的关机方法之外,还有别的选择吗?
发布于 2014-11-22 01:25:18
您必须重新创建graphdatabaseService变量的新实例。
graphDatabaseService = new GraphDatabaseFactory().newEmbeddedDatabase(PATH);或者,使用Neo4j服务器并远程连接--它们不需要“断开”,但在整个网络中会慢一些。
发布于 2014-11-23 21:09:08
这里有一个测试,可以证明你想要做的事情(以及Michael的建议)是正确的。
它创建一个节点,然后关闭数据库,然后再次启动它,并验证节点是否存在。
@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();
}https://stackoverflow.com/questions/27072879
复制相似问题