Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/402.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 Tomcat错误:嵌入式H2 DB只读_Java_Tomcat_H2_Readonly - Fatal编程技术网

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;
    
  • tomcat在尝试运行更新以获取锁时遇到的相同错误


    在默认情况下,如何使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 {
    }