我使用Neo4j存储节点,需要跨类访问Neo4j数据库,这些类应该能够同时连接到数据库。
我目前正在使用
public void setUp()
{
//deleteFileOrDirectory(new File(FILESYSTEM_DB));
graphDb = new GraphDatabaseFactory().newEmbeddedDatabase(FILESYSTEM_DB);
indexManager = graphDb.index();
index = indexManager.forNodes("indexNodes");
registerShutdownHook();
}
创建数据库并连接到它,但是下次另一个类尝试运行类似的方法(或同一个类的另一个实例调用相同的setUp()方法时)我得到一个非常合理的
“获取锁定时出错(org.neo4j.kernal.StoreLockException)”。
如何检查数据库是否正在运行,如果没有调用newEmbeddedDatabase(FILESYSTEM_DB),否则连接到正在运行的实例?
答案 0 :(得分:1)
确保变量graphDb
和其他变量不是局部变量,而是某个类Neo4jConnection
的实例的字段。然后,创建该类的单个实例(单例),运行setUp()
一次,并在需要访问数据库时使用该连接。如何管理该单例,取决于您的环境(您使用Spring吗?)。最简单的方法是使用一个静态变量来引用该单例。阅读https://stackoverflow.com/questions/2832297以及标有java+singleton tags