You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

配置R2DBC与Liquibase的Spring Boot测试应用H2数据库报错求助

解决方案

原因分析

错误提示显示程序尝试在系统根目录创建.testdb.trace.db文件,但系统根目录属于只读文件系统,当前用户没有写入权限。问题根源在于H2数据库的URL写法错误,导致文件路径被解析到了系统根目录。

具体修复方法

方法1:修正数据库文件路径(推荐)

修改Liquibase和R2DBC的H2 URL,使用当前应用运行目录的相对路径,避免写入系统根目录:

修改后的配置:

spring:
  liquibase:
    change-log: classpath:liquibase/db.changelog.xml
    contexts: production
    url: jdbc:h2:file:./.testdb;MODE=MySQL
    
  r2dbc:
    url: r2dbc:h2:file:./.testdb

  h2:
    console:
      enabled: false

关键修改点:

  • Liquibase的JDBC URL:将file:///./.testdb改为file:./.testdb(H2 JDBC的file路径格式为jdbc:h2:file:<相对/绝对路径>,多余的//会导致路径解析到系统根目录)
  • R2DBC的URL:将file:///./.testdb改为file:./.testdb(R2DBC H2的file路径格式为r2dbc:h2:file:<相对/绝对路径>)

修改后,H2会在当前应用启动的目录下创建.testdb相关文件,当前用户默认拥有该目录的写入权限。

方法2:禁用H2的trace日志

如果不想修改路径,也可以通过禁用H2的trace日志来避免生成.testdb.trace.db文件:

修改后的配置:

spring:
  liquibase:
    change-log: classpath:liquibase/db.changelog.xml
    contexts: production
    url: jdbc:h2:file:///./.testdb;MODE=MySQL;TRACE_LEVEL_FILE=0
    
  r2dbc:
    url: r2dbc:h2:file:///./.testdb?traceLevel=0

  h2:
    console:
      enabled: false

关键修改点:

  • Liquibase的JDBC URL添加TRACE_LEVEL_FILE=0参数,关闭文件日志生成
  • R2DBC的URL添加traceLevel=0参数,关闭trace日志输出

方法3:指定有权限的绝对路径

如果需要将数据库文件放在特定目录,直接写入当前用户有权限的绝对路径即可,例如:

spring:
  liquibase:
    url: jdbc:h2:file:/home/yourusername/.testdb;MODE=MySQL
    
  r2dbc:
    url: r2dbc:h2:file:/home/yourusername/.testdb

替换/home/yourusername/为实际的用户目录或其他有权限的目录。


内容的提问来源于stack exchange,提问作者eeqk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 07:50:30