【问题标题】:Liquibase includeAll tag is ignoredLiquibase includeAll 标签被忽略
【发布时间】:2016-09-05 16:08:00
【问题描述】:

我们开始..

我们有一个 Spring Boot 1.4.0 应用程序,我们正在使用 Liquibase 3.5.1 进行数据库管理。

我们所有的单独变更集文件都位于 /src/main/resources/db/changelog 中,它们具有以下命名架构:[semanticVersion]-[descriptor].yml

然而,主变更日志位于运行时依赖项中。

db.changelog-master.yaml

databaseChangeLog:
  - changeSet:
      id: 1.0.1
      author: atlassian
      changes:
        - createTable:
            //code omitted for brevity
  - includeAll:
      path: classpath*:db/changelog
      errorIfMissingOrEmpty: false

现在问题来了。

通过 IDEA 运行应用程序,所有变更集都已加载并应用于我们的数据库。

但是,当我使用 Spring Boot Gradle 插件构建一个胖 jar(bootRepackage 任务)然后继续使用java -jar [project].jar 运行它时,找到了主更改日志,创建了表,但所有其他文件似乎..忽略。 databasechangelog 表仅显示 1.0.1 更新,仅此而已。有趣的事实是,如果我将error 属性设置为true,它只会在我也将path 设置为无法解决的问题时失败。所以看起来目录找到就好了。

注意!所有.yml 文件都在fat jar 中,经过检查和仔细检查:)

我也尝试将它们重命名为.yaml,我尝试将它们替换为相应的.xml 文件,但没有任何解决。

我在 Google、Stack 和 Liquibase JIRA 上进行了挖掘,发现只有少数提到了这种情况,从我读到的内容来看,在 3.5.1 上,这个问题应该已经解决了。但没有骰子。

如果我将 Liquibase 依赖项切换回 3.4.2(这被认为是一种可能的解决方案)并运行 jar,我会得到几千行异常,最终以 Exceptiondb.changelog-master.yaml 未被识别为正确的文件,并且无法找到 DatabaseChangeLog 节点。

如果我错过了任何重要信息,请告诉我,我会尽量详细说明。

【问题讨论】:

  • 似乎 spring-boot 1.4.0 不适用于 liquibase - 请参阅 liquibase.jira.com/browse/CORE-2863
  • 即使问题已解决,在使用 maven 启动集成测试时,我仍然遇到与 liquibase 3.5.2、3.5.3(jar 文件中的 includeAll:db/changelog/sql)相同的问题。从 IDE 启动集成测试时没有问题。我必须降级到 3.4.1 或改用 include 而不是 includeAll
  • 也许这与stackoverflow.com/q/41678616/4864870有关。有一些技术细节可以帮助 liquibase 开发人员找到问题。

标签: spring spring-boot liquibase


【解决方案1】:

这似乎在更高版本的 liquibase 中得到修复,而不是 spring boot 当前设置的。

通过以下方式覆盖版本:

ext["liquibase.version"] = "3.5.4"

另外,知道这个问题在spring boot 1.5

中仍然存在

参考:https://liquibase.jira.com/browse/CORE-2863

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 2013-01-16
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    相关资源
    最近更新 更多