禁用Neo4j图形数据库的锁定?

我的应用程序在/tmp/import.db填充Neo4j图形数据库。 除了我的unit testing,我还想使用Neo4j浏览器(AKA Neo4j社区)在同一个数据库中进行一些挖掘。 当浏览器运行时,我的应用程序在运行时崩溃,因为它被锁定的数据库:

 Exception in thread "main" java.lang.RuntimeException: Error starting org.neo4j.kernel.EmbeddedGraphDatabase, /tmp/import.db at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:330) at org.neo4j.kernel.EmbeddedGraphDatabase.(EmbeddedGraphDatabase.java:63) at org.neo4j.graphdb.factory.GraphDatabaseFactory$1.newDatabase(GraphDatabaseFactory.java:92) at org.neo4j.graphdb.factory.GraphDatabaseBuilder.newGraphDatabase(GraphDatabaseBuilder.java:198) at org.neo4j.graphdb.factory.GraphDatabaseFactory.newEmbeddedDatabase(GraphDatabaseFactory.java:69) at no.marcello.cmdb.Import.(Import.java:34) at no.marcello.cmdb.Main.main(Main.java:10) Caused by: org.neo4j.kernel.lifecycle.LifecycleException: Component 'org.neo4j.kernel.StoreLockerLifecycleAdapter@5d20e46' was successfully initialized, but failed to start. Please see attached cause exception. at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:509) at org.neo4j.kernel.lifecycle.LifeSupport.start(LifeSupport.java:115) at org.neo4j.kernel.InternalAbstractGraphDatabase.run(InternalAbstractGraphDatabase.java:307) ... 6 more Caused by: org.neo4j.kernel.StoreLockException: Unable to obtain lock on store lock file: /tmp/import.db/store_lock. Please ensure no other process is using this database, and that the directory is writable (required even for read-only access) at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:82) at org.neo4j.kernel.StoreLockerLifecycleAdapter.start(StoreLockerLifecycleAdapter.java:44) at org.neo4j.kernel.lifecycle.LifeSupport$LifecycleInstance.start(LifeSupport.java:503) ... 8 more Caused by: java.io.IOException: Unable to lock sun.nio.ch.FileChannelImpl@70b0b186 at org.neo4j.kernel.impl.nioneo.store.FileLock.wrapFileChannelLock(FileLock.java:38) at org.neo4j.kernel.impl.nioneo.store.FileLock.getOsSpecificFileLock(FileLock.java:93) at org.neo4j.kernel.DefaultFileSystemAbstraction.tryLock(DefaultFileSystemAbstraction.java:89) at org.neo4j.kernel.StoreLocker.checkLock(StoreLocker.java:74) ... 10 more 

现在我必须在我的应用程序的每次运行之间neo4j start neo4j stopneo4j start以查看更改。 我的手厌倦了。

使用Neo4j浏览器时,我可以禁用数据库锁定吗? 我想这样做是为了测试目的,因为它有助于我在填充它时看到我的数据库模型如何演变。

无论如何,数据库系统 – 小型系统 – 通常可以以两种模式运行:嵌入式或服务器式。 在嵌入式模式中,想法是一个程序和一个程序一次只能读写数据库。 这对于许多应用程序非常有用,并且允许数据库省去允许多个程序之间访问所需的代码,这会占用时间,代码和处理能力。

在服务器模式下,数据库管理系统本身作为单独的程序运行,并且构建为允许多个程序访问它。

基于上面错误消息中的类,您有一个嵌入式数据库,因此您的问题的答案是“不,您不能在此模式下执行此操作”。 我希望你可以切换到使用neo4j的服务器模式,但是连接它会涉及一些代码更改,然后你会遇到一些小问题,即确保你的程序运行时数据库系统正在运行等等。

因此,您可以使用此数据库数据执行此操作,但您必须更改运行数据库管理系统的模式。