当在url中指定文件路径时,不允许两个客户端同时链接

这个稍微有点违背我的使用习惯,但是问题还不太严重,具体问题描述如下:

  1. 我DataGrip指定了h2的数据库文件,url为:jdbc:h2:file:~/test2;AUTO_SERVER=TRUE;
  2. 我Java代码中指令了h2的数据库文件,url为:jdbc:h2:file:~/test2;AUTO_SERVER=TRUE;

结果我Java代码启动的时候会报如下的错误:


Caused by: java.lang.IllegalStateException: The file is locked: nio:C:/Users/wujj/test2.mv.db [1.4.200/7]
	at org.h2.mvstore.DataUtils.newIllegalStateException(DataUtils.java:950)
	at org.h2.mvstore.FileStore.open(FileStore.java:172)
	at org.h2.mvstore.MVStore.<init>(MVStore.java:381)
	at org.h2.mvstore.MVStore$Builder.open(MVStore.java:3579)
	at org.h2.mvstore.db.MVTableEngine$Store.open(MVTableEngine.java:170)
	... 117 more

这个现象从原理上很好理解的,两个进程操作同一个文件,会造成很多的问题,所以将这个文件锁住,阻止另一个文件访问时很有必要的。