Spring Boot项目java -jar启动时Liquibase不执行变更集问题求助
排查方向
- 先调整日志级别定位根因
在配置文件中添加logging.level.liquibase=DEBUG后重启jar包,debug日志会输出是否扫描到变更文件、是否因为条件跳过变更集、是否出现文件读取异常等关键信息,你当前的info级别日志只会输出核心执行步骤,很多跳过逻辑不会打印。 - 检查变更文件是否打入Jar包
解压你打的jar包,查看BOOT-INF/classes目录下是否存在db目录,以及db/changelog下的所有变更xml文件是否完整。很多项目的Mavenresources配置会限制仅扫描yml/properties类型文件,本地IDEA启动时会直接加载src/main/resources下所有文件不会触发这个问题,但执行mvn clean install时会按照pom配置过滤资源,导致xml变更文件被遗漏。 - 修正
includeAll的路径写法
你当前根变更日志中<includeAll path="./db/changelog"/>的相对路径写法在Jar包的classpath环境下极易失效,建议修改为:
同时确认配置文件中<includeAll path="db/changelog" relativeToChangelogFile="true"/>spring.liquibase.change-log的取值为classpath:db/changelog-root.xml,保证SpringBoot能正确定位根变更日志。 - 检查多环境配置是否禁用了Liquibase
确认你启动Jar包时使用的Profile对应的配置文件中,没有设置spring.liquibase.enabled=false,不少项目会在生产环境配置中默认关闭Liquibase自动执行,仅在本地开发环境开启,就会出现本地运行正常、Jar包启动不执行变更的现象。 - 校验前置条件是否匹配
你变更日志中配置了PostgreSQL的前置校验,不匹配时仅输出警告不终止执行,如果你的运行环境连接的不是PostgreSQL数据库,会直接跳过所有变更集,可以在启动日志中搜索Non postgres databases are not supported for SI, good luck!关键词确认是否触发了该规则。
内容的提问来源于stack exchange,提问作者Dylan Kidd
相关产品推荐
相关产品推荐

