代码之家  ›  专栏  ›  技术社区  ›  Anton Barinov

Liquibase:从测试链接主yaml changelog

  •  2
  • Anton Barinov  · 技术社区  · 6 年前

    我想从src/main/resources链接yaml数据库创建规则。在src/test/resources中,再添加一个包含示例数据的chagngelog。

    src\test\resources\db\changelog\db.changelog-master.yaml:

    databaseChangeLog:
    - include:
        file: ../../main/resources/db/changelog/db.changelog-master.yaml
    - include:
        file: db/changelog/marketplace/sampleData.yaml
    

    但它不起作用。因此,错误是:分析../../main/resources/db/changelog/db.changelog-master.yaml时出错。

    是否有其他选项可以将主资源与主资源链接? 这是一个春季启动项目。

    错误堆栈跟踪:

    Caused by: liquibase.exception.ChangeLogParseException: Error parsing classpath:/db/changelog/db.changelog-master.yaml
    at liquibase.parser.core.yaml.YamlChangeLogParser.parse(YamlChangeLogParser.java:84)
    at liquibase.Liquibase.getDatabaseChangeLog(Liquibase.java:217)
    at liquibase.Liquibase.update(Liquibase.java:190)
    at liquibase.Liquibase.update(Liquibase.java:179)
    at 
    

    Caused by: java.io.FileNotFoundException: class path resource [../../main/resources/db/changelog/db.changelog-master.yaml] cannot be resolved to URL because it does not exist
    at org.springframework.core.io.ClassPathResource.getURL(ClassPathResource.java:195)
    at liquibase.integration.spring.SpringLiquibase$SpringResourceOpener.getResourcesAsStream(SpringLiquibase.java:504)
    at liquibase.util.StreamUtil.singleInputStream(StreamUtil.java:186)
    at liquibase.parser.core.yaml.YamlChangeLogParser.parse(YamlChangeLogParser.java:27)
    ... 52 more
    
    3 回复  |  直到 6 年前
        1
  •  3
  •   luboskrnac    6 年前

    我建议以不同的方式命名位于测试路径中的changelog文件,因为在测试期间, main / test 路径合并为一个相对路径,用于测试套件运行。我怀疑liquibase认为您试图递归地包含相同的文件。

    只需重命名 db.changelog-master.yaml 在测试路径下 db.changelog-master-test.yaml

        2
  •  1
  •   luboskrnac    6 年前

    我们以这种方式包含SQL文件:

      - sqlFile:
          encoding: utf8
          path: /db/changelog/schema/schema.sql
    

    所以试着在开头加上斜线。

        3
  •  1
  •   Alien    6 年前

    给出完整的路径,而不是 ../../main/resources/db/changelog/db.changelog-master.yaml 编译器无法分析中的路径。格式。

    如果文件存在于类路径中,则下面的内容足以加载文件,否则将给出完整的项目上下文路径。

    db/changelog/db.changelog-master.yaml