Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java h2不再在自动_服务器模式下工作。“线程中的异常”;“主要”;org.h2.jdbc.JdbcSQLException:不支持功能:";自动服务器模式_Java_Jdbc_H2 - Fatal编程技术网

Java h2不再在自动_服务器模式下工作。“线程中的异常”;“主要”;org.h2.jdbc.JdbcSQLException:不支持功能:";自动服务器模式

Java h2不再在自动_服务器模式下工作。“线程中的异常”;“主要”;org.h2.jdbc.JdbcSQLException:不支持功能:";自动服务器模式,java,jdbc,h2,Java,Jdbc,H2,我刚刚下载的全新稳定版h2。一个星期以来一直工作得很好。我的错误是 Exception in thread "main" org.h2.jdbc.JdbcSQLException: Feature not supported: "autoServerMode && (readOnly || fileLockMethod == NO || fileLockMethod == SERIALIZED || fileLockMethod == FS || inMemory)" [5010

我刚刚下载的全新稳定版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 DB,作为“jdbc:h2:./PATH/DB;IFEXISTS=TRUE;DB\u CLOSE\u ON\u EXIT=FALSE;AUTO\u SERVER=TRUE”

后端永远运行,将数据处理到数据库中,因此数据库永远不会关闭。然后我有一些前端java servlet,当web用户运行它们时,他们使用相同的URL打开数据库,获取信息,并显示HTML。这一切都正常工作,现在backed在打开DB时失败,错误与我在尝试使用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)
线程“main”org.h2.jdbc.JdbcSQLException中的异常:不支持功能:“autoServerMode&&(只读| | | fileLockMethod==NO | | fileLockMethod==SERIALIZED | | fileLockMethod==FS | inMemory)”[50100-196] 位于org.h2.message.DbException.getJdbcSQLException(DbException.java:345) 位于org.h2.message.DbException.get(DbException.java:179) 位于org.h2.message.DbException.get(DbException.java:155) 位于org.h2.message.DbException.getUnsupportedException(DbException.java:216) 位于org.h2.engine.Database.open(Database.java:644) 位于org.h2.engine.Database.openDatabase(Database.java:276) 位于org.h2.engine.Database。(Database.java:270) 位于org.h2.engine.engine.openSession(engine.java:64) 位于org.h2.engine.engine.openSession(engine.java:176) 位于org.h2.engine.engine.createSessionAndValidate(engine.java:154) 位于org.h2.engine.engine.createSession(engine.java:137) 位于org.h2.engine.engine.createSession(engine.java:27) 位于org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:354) JdbcConnection(JdbcConnection.java:116) JdbcConnection(JdbcConnection.java:100) 位于org.h2.Driver.connect(Driver.java:69) 位于java.sql.DriverManager.getConnection(DriverManager.java:664) 位于java.sql.DriverManager.getConnection(DriverManager.java:247) 位于org.h2.tools.Shell.runTool(Shell.java:148) 位于org.h2.tools.Shell.main(Shell.java:81)
我阻止了tomcat,再试一次,得到了同样的结果。我检查了ps,没有其他java进程在运行。Netstat命令仅显示端口22正在侦听。如果我取下AUTO_SERVER=TRUE,我可以在该DB url上打开shell工具。但不知道为什么。我甚至进去看到一个锁文件。我重命名了它,并试图在自动模式下再次打开db,同样的错误。不确定这里出了什么问题,或者下一步要尝试什么。

自H2的1.4版以来,使用的默认
文件锁定方法是
FS
,该方法与
自动服务器=TRUE
不一起工作。我猜是因为您没有在连接字符串中显式提供
FILE\u LOCK
方法,升级H2库但未更改连接字符串后,您开始看到此异常,因为库本身内部更改了它的工作方式。

数据库文件可写入当前文件系统用户吗?嗯。实际上,我注意到文件所有者是root,组也是root。我几乎可以肯定,当我创建它时,我是一个不同的用户,运行后端java程序的同一个用户。现在,运行servlet的tomcat服务器是root/root。但是前端servlet从不执行任何写入/更新,只执行“选择”SQL语句。但我想这可能有什么关系?如果是这样,我不太确定与中央数据库进行后端/前端合作的“正确”方式。我以root用户身份运行tomcat,因为我希望我的HTTP服务器位于端口80上。您不应该以root用户身份运行tomcat,有几种不使用端口80的方法。但是,仅仅因为它是以root身份运行的,并不意味着该文件需要归root所有。根用户可以读/写任何文件,无论其所有者是谁,您可以尝试将所有权更改为运行后端的用户,但您可能仍然存在锁定文件的所有权问题,我不确定。通常,您应该尝试并确保后端在前端之前先启动,如AUTO_SERVER文档中所述。