Spring Boot启动时配置的Liquibase SQL脚本未执行该如何排查?
可能的原因如下:
- sqlFile配置格式错误
你当前data.yaml中sqlFile的属性用了数组前缀-,属于格式错误,Liquibase无法识别该配置会直接跳过执行。
错误写法:
正确写法(去掉属性前的短横线,改成对象格式):changes: - sqlFile: - relativeToChangelogFile: true - path: data.sqlchanges: - 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
相关产品推荐
相关产品推荐

