h2不再适用于AUTO_SERVER模式。线程" main"中的例外情况org.h2.jdbc.JdbcSQLException:不支持的功能:" autoServerMode

时间:2017-07-05 15:40:29

标签: java jdbc h2

我刚下载的全新稳定版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,同样的错误。不知道这里出了什么问题,或者接下来要尝试什么。

1 个答案:

答案 0 :(得分:0)

从H2版本1.4开始,使用的默认FILE_LOCK方法是FS,该方法AUTO_SERVER=TRUE一起使用。我猜是因为您没有在连接字符串中显式提供FILE_LOCK方法,所以一旦升级H2库但没有更改连接字符串,您就开始看到此异常,因为库本身在内部改变了方式可以。

相关问题