我刚下载的全新稳定版h2。一直工作到现在为止一周。我的错误是
Exception in thread "main" org.h2.jdbc.JdbcSQLException: Feature not supported: "autoServerMode && (readOnly || fileLockMethod == NO || fileLockMethod == SERIALIZED || fileLockMethod == FS || inMemory)" [50100-196]
我一直在使用自动混合模式一周,我的后端java程序首先打开预先创建的h2数据库"jdbc:h2:./PATH/db;IFEXISTS=TRUE;DB_CLOSE_ON_EXIT=FALSE;AUTO_SERVER=TRUE";
后端永远运行,将数据处理到DB中,因此数据库永远不会关闭。然后我有一些前端java servlet,当web用户运行它们时,他们使用相同的URL打开数据库,获取信息,并呈现HTML。这一切都工作了,现在支持失败打开数据库时我尝试使用shell工具时尝试相同的URL时遇到同样的错误:
Exception in thread "main" org.h2.jdbc.JdbcSQLException: Feature not supported: "autoServerMode && (readOnly || fileLockMethod == NO || fileLockMethod == SERIALIZED || fileLockMethod == FS || inMemory)" [50100-196]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.message.DbException.getUnsupportedException(DbException.java:216)
at org.h2.engine.Database.open(Database.java:644)
at org.h2.engine.Database.openDatabase(Database.java:276)
at org.h2.engine.Database.<init>(Database.java:270)
at org.h2.engine.Engine.openSession(Engine.java:64)
at org.h2.engine.Engine.openSession(Engine.java:176)
at org.h2.engine.Engine.createSessionAndValidate(Engine.java:154)
at org.h2.engine.Engine.createSession(Engine.java:137)
at org.h2.engine.Engine.createSession(Engine.java:27)
at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:354)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:116)
at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:100)
at org.h2.Driver.connect(Driver.java:69)
at java.sql.DriverManager.getConnection(DriverManager.java:664)
at java.sql.DriverManager.getConnection(DriverManager.java:247)
at org.h2.tools.Shell.runTool(Shell.java:148)
at org.h2.tools.Shell.main(Shell.java:81)
我停止了tomcat,再次尝试,得到同样的东西。我检查了ps,并且没有其他java进程在运行。 Netstat命令仅显示端口22 LISTENING。我可以在该DB url 上打开shell工具,如果我取消了AUTO_SERVER = TRUE。但不知道为什么。我甚至进去看了一个锁文件。我重命名它并试图在AUTO_MODE中再次打开db,同样的错误。不知道这里出了什么问题,或者接下来要尝试什么。
答案 0 :(得分:0)
从H2版本1.4开始,使用的默认FILE_LOCK
方法是FS
,该方法不与AUTO_SERVER=TRUE
一起使用。我猜是因为您没有在连接字符串中显式提供FILE_LOCK
方法,所以一旦升级H2库但没有更改连接字符串,您就开始看到此异常,因为库本身在内部改变了方式可以。