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

Liquibase 4.0及以上版本在Spring Boot集成测试中无法找到changelog文件

问题根因

你当前的报错是两个配置不匹配导致的:

  • 你使用了FileSystemResourceAccessor,该访问器仅支持读取本地文件系统路径,无法识别classpath:前缀,也无法读取Jar包内的类路径资源
  • src/test/resources/是源代码目录结构,测试运行时该目录不存在,编译后的资源文件会直接放到类路径根目录下,原路径失效

可行解决方案

推荐使用类路径访问方式,该方案在本地运行、Jar包运行场景下均有效,修改LiquibaseRunner类中的实例化代码即可:

  1. 将资源访问器从FileSystemResourceAccessor替换为ClassLoaderResourceAccessor,该访问器专门用于加载类路径下的资源
  2. 去掉路径中的src/test/resources/前缀,直接写类路径下的相对路径db/changelog/db.changelog-test.xml

修改后的代码片段如下:

public static void runUpdate(Connection connection) throws LiquibaseException {
    Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
    // 仅修改下面这行代码即可
    Liquibase liquibase = new liquibase.Liquibase("db/changelog/db.changelog-test.xml", new ClassLoaderResourceAccessor(), database);
    liquibase.update(new Contexts(), new LabelExpression());
}

如果你必须使用FileSystemResourceAccessor,可以先通过Spring工具类获取资源的本地绝对路径,该方案仅支持本地运行、不支持Jar包部署场景,代码如下:

// 需引入spring-core的ResourceUtils工具类
String changelogPath = ResourceUtils.getFile("classpath:db/changelog/db.changelog-test.xml").getAbsolutePath();
Liquibase liquibase = new liquibase.Liquibase(changelogPath, new FileSystemResourceAccessor(), database);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 23:54:05