问题描述
在我的应用程序中,我有几个模块,即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。
不幸的是,这有很多问题:
- 每次执行顺序失败时,都需要手动重新运行更新
- 除非我将A56标记为依赖于A55,否则它不会阻止A56执行...
我真正想要的是基于依赖关系的某种执行顺序自动重排
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)