从 liquibase 脚本运行环境特定的更改

unk*_*own 1 oracle liquibase liquibase-hibernate

我们使用 liquibase 进行数据库版本控制。我们用它来将数据库更改部署到任何层,例如 TST、AT 和 PROD。我们构建一次并将相同的更改部署到任何地方,但我们有某些东西应该部署到特定层。我不确定这是否可能或不是

\n\n

例如

\n\n

让\xe2\x80\x99s 说我们将应用程序URL 存储在数据库中,并且每个环境(INT、UAT、PROD)都有\xe2\x80\x99s 拥有不同的应用程序URL。我们如何使用 liquibase 脚本来做到这一点?

\n

Ste*_*nie 5

您可以使用变更集和命令可用的contextslabels属性来完成您想要的任务。

\n\n

这篇 Liquibase 博客文章对此进行了详细介绍。这是描述上下文的那篇文章中的引用:

\n\n
\n

Liquibase 中的上下文已经可用很长一段时间了,它们最初主要是作为 \xe2\x80\x9ctagging\xe2\x80\x9d 变更集的一种方式,以便可以在运行时\n 选择它们。一种常见用途是将插入测试数据的变更集标记为 context=\xe2\x80\x9dtest\xe2\x80\x9d,以便在开发和 QA\n 环境中,您可以使用 \xe2\x80\x93contexts 运行 liquibase =test 以获取\n 测试数据,并在生产中使用 \xe2\x80\x93contexts=prod 运行,\n 没有测试数据。上下文还有助于根据要包含的功能集标记变更集 (context=\xe2\x80\x9dshoppingCart\xe2\x80\x9d) 或捆绑包\n (context=\xe2\x80\x9dpro\xe2\x80\x9d )甚至客户(context=\xe2\x80\x9dacme_inc\xe2\x80\x9d)。对于复杂的情况,可以将多个上下文应用于变更集,例如 context=\xe2\x80\x9dacme_inc、pro\xe2\x80\x9d,并且可以在运行时选择多个上下文,例如 \xe2\x80 \x93contexts=免费,qa。

\n\n

在 Liquibase 3.2 中,添加了对变更集中上下文表达式的支持。现在,当您定义变更集时,您可以指定复杂的逻辑,例如 context=\xe2\x80\x9d!test\xe2\x80\x9d 或 context=\xe2\x80\x9dqa 或 (acme_inc 和\n dev) \xe2\x80\x9d。但是,上下文逻辑只能在您的changeSet\n 定义中指定。运行 Liquibase 时,您仍然可以指定多个上下文,但只是列出适用于当前 Liquibase 运行的所有上下文。

\n
\n