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

Spring Boot启动时配置的Liquibase SQL脚本未执行该如何排查?

可能的原因如下:

  • sqlFile配置格式错误
    你当前data.yaml中sqlFile的属性用了数组前缀-,属于格式错误,Liquibase无法识别该配置会直接跳过执行。
    错误写法:
    changes:
      - sqlFile:
          - relativeToChangelogFile: true
          - path: data.sql
    
    正确写法(去掉属性前的短横线,改成对象格式):
    changes:
      - sqlFile:
          relativeToChangelogFile: true
          path: data.sql
    
  • Liquibase依赖缺失
    检查项目构建文件是否引入了完整的依赖,Spring Boot项目需要同时引入liquibase-core和spring-boot-starter-jdbc才会触发Liquibase自动执行,Maven参考配置:
    <dependency>
        <groupId>org.liquibase</groupId>
        <artifactId>liquibase-core</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    
  • Liquibase功能被禁用
    检查全局配置、启动参数、环境变量中是否存在spring.liquibase.enabled=false配置,该配置会直接关闭Liquibase的自动执行逻辑。
  • changeSet已被标记为已执行
    Liquibase会在databasechangelog表记录所有已执行的changeSet,如果你在该changeSet第一次执行后才添加runAlways: true,部分旧版本Liquibase不会触发重执行。可以手动删除databasechangelog表中ID=0001、AUTHOR=test的记录后重启测试。
  • data.sql文件路径不匹配
    你配置了relativeToChangelogFile: true,意味着data.sql需要和data.yaml放在同一级目录下,如果文件存放路径不对,Liquibase找不到文件会直接跳过,部分版本不会输出错误日志。
  • Hibernate建表顺序晚于Liquibase执行
    Spring Boot默认Liquibase执行顺序早于Hibernate的ddl-auto逻辑,如果你用ddl-auto: update自动生成tasks表,执行insert语句时表还未创建,SQL会执行失败。建议把建表逻辑也迁移到Liquibase的changeSet中,同时把spring.jpa.hibernate.ddl-auto改成none。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:42:01