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

Spring Boot集成Liquibase启动报错:无法找到changelog文件

解决Spring Boot启动时Liquibase找不到changelog文件的问题

我之前在集成Liquibase的时候也碰到过完全一样的问题——CLI命令跑起来一切正常,但Spring Boot一启动就报找不到db/changelog/db.changelog-master.yaml的错误,折腾了好一阵子才解决。下面是我总结的排查步骤,你可以一步步试:

1. 先确认文件路径和拼写绝对正确

  • 你的项目是Maven/Gradle结构的话,changelog文件必须放在src/main/resources目录下,完整路径应该是src/main/resources/db/changelog/db.changelog-master.yaml,别误放到src/main/java里(这个目录下的非.java文件默认不会被打包到classpath)。
  • 注意文件名大小写!尤其是在Linux或Mac环境下,系统是区分大小写的,要是你写成了DB.changelog-master.yaml或者漏了某个字母,Spring Boot肯定找不到。

2. 检查Spring Boot的Liquibase配置

打开你的application.properties或application.yml,确认Liquibase的配置路径是否正确:

  • 如果你用的是yml格式,配置应该是这样的:
    spring:
      liquibase:
        change-log: classpath:db/changelog/db.changelog-master.yaml
    
    要是你自定义了changelog的位置,这里的路径必须和实际文件路径对应。如果没配置这个属性,Spring Boot会默认找上述路径,所以还是得确保文件存在。

3. 验证构建工具是否正确打包了资源文件

有时候问题出在构建工具没有把yaml文件复制到输出目录:

  • Maven用户:检查pom.xml里的资源插件配置,确保包含了yaml/yml文件:
    <build>
      <resources>
        <resource>
          <directory>src/main/resources</directory>
          <includes>
            <include>**/*.yaml</include>
            <include>**/*.yml</include>
            <include>**/*.properties</include>
          </includes>
        </resource>
      </resources>
    </build>
    
    执行mvn clean package后,去target/classes目录下看看有没有db/changelog/db.changelog-master.yaml,如果没有,说明构建时没复制文件,得调整配置。
  • Gradle用户:检查build.gradle的sourceSets配置,确保resources目录被正确识别:
    sourceSets {
      main {
        resources {
          srcDirs = ['src/main/resources']
          include '**/*.yaml', '**/*.yml'
        }
      }
    }
    
    执行gradle clean build后,查看build/resources/main目录下的文件是否存在。

4. 清理IDE缓存并重新构建

IDE缓存有时候会坑人,导致文件没被同步到输出目录:

  • IntelliJ IDEA:点击Build -> Clean Project,然后Build -> Rebuild Project;也可以试试File -> Invalidate Caches...,勾选"Clear file system cache and local history"后重启IDE。
  • Eclipse:点击Project -> Clean,选择你的项目后执行清理,然后重新构建。

5. 多模块项目的特殊排查

如果是多模块Spring Boot项目:

  • 确保changelog文件在启动模块的src/main/resources下,或者在被依赖的模块中,且该模块的资源文件被正确打包(比如依赖模块的pom.xml里要配置资源导出)。
  • 检查启动模块的依赖是否正确引入了包含changelog的模块。

按照这些步骤排查下来,基本都能解决问题。我当时就是因为Maven的资源插件默认过滤了yaml文件,加上IDE缓存没同步,才折腾了好久😅

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:10:28