Neo4j跨类获取多个数据库实例

时间:2014-01-09 10:35:12

标签: java java-ee neo4j

我使用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),否则连接到正在运行的实例?

1 个答案:

答案 0 :(得分:1)

确保变量graphDb和其他变量不是局部变量,而是某个类Neo4jConnection的实例的字段。然后,创建该类的单个实例(单例),运行setUp()一次,并在需要访问数据库时使用该连接。如何管理该单例,取决于您的环境(您使用Spring吗?)。最简单的方法是使用一个静态变量来引用该单例。阅读https://stackoverflow.com/questions/2832297以及标有java+singleton tags

的其他讨论