为陈旧环境定制Liquibase多模块执行顺序

问题描述

在我的应用程序中,我有几个模块,即modA,modB,modC。

在主要变更日志中,我说要包括modA,modB,modC中的所有内容。 每个模块都包含自己的变更日志,以便人们添加变更集。 只要使部署的环境保持最新,就可以了-将按指定顺序执行modA变更集,然后执行modB等。 但是,有些情况下,有些环境会保持几个月的陈旧状态,然后进行大规模升级,其中包含许多新变更集。

由于每个新变更集的创建都基于创建变更集时架构的假定状态,因此可能会导致问题:

pre-update schema state:
modA's last changeset is A50
modB's last changeset is B14
modC's last changeset is C4

这意味着下一个变更集将基于{A50,B14,C4}的架构

现在,我正在进行批量更新,并且尝试推送新状态{A74,B25,C10}。 Liquibase将通过首先获取变更集A51至A74并首先执行它们来执行变更日志。如果每个变更集A51-> A74都基于{*,B14,C4},这将很好。但是,如果不是这种情况,可能会引起问题。

Liquibase具有changeSetExecuted前提条件,如果尚未依赖变更集,则可以使用该前提条件不运行变更集。因此,从理论上讲,我可以拥有依赖于C6的变更集A55,并且可以向A55添加前提条件以检查是否执行了C6,否则可以进行WARN。然后重新运行更新并执行A55,因为届时将已应用C6。

不幸的是,这有很多问题:

  1. 每次执行顺序失败时,都需要手动重新运行更新
  2. 除非我将A56标记为依赖于A55,否则它不会阻止A56执行...

我真正想要的是基于依赖关系的某种执行顺序自动重排

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)