【问题标题】:Liquibase conditional migrationLiquibase 条件迁移
【发布时间】:2021-06-29 13:50:30
【问题描述】:

我想自动化一些堆栈迁移过程:Java、Maven、Spring-Boot、Postgres、Liquibase。

是否可以将一些 liquibase 更改日志推迟到特定的 maven 模块版本?

例子:

  • 更改:
    • changelog1.yaml
    • changelog2.yaml
  • 2.1: # 在 2.1 版部署期间执行
    • changelog3.yaml
    • changelog4.yaml
  • 2.2: # 在 2.2 版部署期间执行
    • changelog5.yaml
    • changelog6.yaml

在部署 2.0 的情况下,只会应用前 2 个更改日志。

知道怎么做吗?

【问题讨论】:

  • 有一种上下文机制:docs.liquibase.com/concepts/advanced/contexts.html。但看起来你在组织编码过程方面做错了。例如,您可以创建 git 标签并部署您想要的标签,该标签将只包含所需的更改。
  • 假设我需要将某个列从 a 重命名为 b。我将从 a 创建一个新列 b 并重新部署所有 pod(应用程序实例),在重新部署期间,新旧 pod 可以一起工作。在下一个版本中,我将删除 a 列。你有什么缺点、cmets 或想法吗?
  • 我知道问题是所有版本都已经存在?如果您在单独的分支中维护所有三个版本,我会将每个更改日志提交到与应该首先引入它的版本相对应的分支,然后可能会挑选提交到所有后续分支。此外,通常您会将 2.1 升级到 3.0,因为删除列不向后兼容
  • 此方法需要开发人员操作。我需要自动化这个过程。我想要不采取行动的部署。

标签: java spring-boot maven liquibase


【解决方案1】:

Liquibase 标签允许您选择要在运行时执行的变更集子集。

可以使用 AND、OR、! 和 ()(用于分组的括号)指定标签。例如:

labels="!v.2.1"
labels="v.2.0 and v.2.1"
labels="v.2.0 or v.2.1"
labels="!v.2.0 and !v.2.1"

在您的情况下,版本可能是 maven 模块版本。

【讨论】:

    猜你喜欢
    • 2017-09-29
    • 2011-05-22
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2013-05-07
    相关资源
    最近更新 更多