Java Tomcat错误:嵌入式H2 DB只读
在尝试启动使用Java Tomcat错误:嵌入式H2 DB只读,java,tomcat,h2,readonly,Java,Tomcat,H2,Readonly,在尝试启动使用嵌入式h2.db文件的应用程序时,我的tomcat日志中出现以下错误: Caused by: org.h2.jdbc.JdbcSQLException: The database is read only**; SQL statement:<br> UPDATE DATABASECHANGELOGLOCK SET LOCKED = TRUE, LOCKEDBY = '192.168.122.1 (192.168.122.1)', LOCKGRANTED = '2017-
嵌入式h2.db
文件的应用程序时,我的tomcat日志中出现以下错误:
Caused by: org.h2.jdbc.JdbcSQLException: The database is read only**; SQL statement:<br>
UPDATE DATABASECHANGELOGLOCK SET LOCKED = TRUE, LOCKEDBY = '192.168.122.1 (192.168.122.1)', LOCKGRANTED = '2017-10-19 17:06:08.499' WHERE ID = 1 AND LOCKED = FALSE [90097-175]<br>
at org.h2.message.DbException.getJdbcSQLException(DbException.java:332)
at org.h2.message.DbException.get(DbException.java:172)
at org.h2.message.DbException.get(DbException.java:149)
at org.h2.message.DbException.get(DbException.java:138)
at org.h2.engine.Database.checkWritingAllowed(Database.java:1784)
at org.h2.table.Table.checkWritingAllowed(Table.java:1082)
at org.h2.engine.User.hasRight(User.java:114)
at org.h2.engine.User.checkRight(User.java:100)
at org.h2.command.dml.Update.update(Update.java:87)
sql> SHOW TABLES;
TABLE_NAME | TABLE_SCHEMA
BUILDING_DOMAIN | PUBLIC
CALENDAR | PUBLIC
CAMPUS_DOMAIN | PUBLIC
CATEGORY | PUBLIC
CONFIGURATION_DOMAIN | PUBLIC
DATABASECHANGELOG | PUBLIC
DATABASECHANGELOGLOCK | PUBLIC
ENTRY_CACHE | PUBLIC
ENTRY_CACHE_LINK | PUBLIC
ENTRY_DOMAIN | PUBLIC
EVENT | PUBLIC
EVENT_CATEGORIES | PUBLIC
FEED_CACHE | PUBLIC
FEED_CACHE_LINK | PUBLIC
MS_DEVICE | PUBLIC
MS_DEVICEUSER | PUBLIC
MS_NMESSAGE | PUBLIC
MS_NOTIFICATION | PUBLIC
MS_NOT_DEL_REC_DOMAIN | PUBLIC
MS_NSTATUS | PUBLIC
MS_RECIPIENT | PUBLIC
MS_RECIPIENT_STATUSES | PUBLIC
NOTIFICATION_DELIVERY_DOMAIN | PUBLIC
NUMBERS_DOMAIN | PUBLIC
REGISTRATION_CART | PUBLIC
SYSTEM_DATA_DOMAIN | PUBLIC
(26 rows, 28 ms)
(如下所示,locked设置为FALSE)
sql> UPDATE DATABASECHANGELOGLOCK SET LOCKED=FALSE, LOCKGRANTED=null, LOCKEDBY=null where ID=1;
Error: org.h2.jdbc.JdbcSQLException: The database is read only;
在默认情况下,如何使h2 db可用于读写?在运行Tomcat作为服务的Windows服务器上,我遇到了同样的问题。默认情况下,它作为本地_服务帐户运行,该帐户没有对db文件夹的写入权限。您可以通过向本地\u服务帐户的db文件夹授予修改权限,或将服务帐户更改为本地\u系统来解决此问题。添加此选项对我来说很有效
@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
class ApplicationConfig {
}
您的用户是否具有该路径的写入权限?在我的疑难解答中,我使用sudo运行该命令,并且我能够查看H2 DB的内容,如上所示。Tomcat肯定具有访问权限,因为该文件位于Tomcat的子目录中,具有以下权限:rw-r--r--。1 tomcat tomcat 321536 10月20日00:22 banner-mobileserver-prodD.h2.dbsudo到哪个帐户?我使用sudo时没有指定一个用户,我认为在运行需要提升权限的命令时,该用户默认为Red Hat Enterprise中的root用户。它(无处不在)。我不记得Tomcat的具体情况,但我知道,如果以root用户身份启动,许多服务器将放弃特权。
sql> UPDATE DATABASECHANGELOGLOCK SET LOCKED=FALSE, LOCKGRANTED=null, LOCKEDBY=null where ID=1;
Error: org.h2.jdbc.JdbcSQLException: The database is read only;
@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
class ApplicationConfig {
}