我在我的项目中使用Liquibase并且需要在每次Liquibase更新后执行一个程序...
目前,changeSet看起来像这样:
<changeSet id="liquibase-0" author="liquibase" runAlways="true">
<sqlFile relativeToChangelogFile="true" path="procedure/owner-changer.sql"/>
</changeSet>
如何确保此changeSet将作为上次更新操作运行?
THKS
我会通过将变更集拆分为两个文件来完成此操作:一个包含“常规”变更集,另一个包含此单个变更集。然后以正确的顺序创建一个包含两者的新“主”变更集:
<databaseChangeLog>
<include file="standard_changes.xml" relativeToChangelogFile="true"/>
<include file="change_owner.xml" relativeToChangelogFile="true"/>
</databaseChangeLog>
change_owner.xml
仅包含您在问题中显示的单个变更集。
这并不保证它总是最后运行,因为您仍然可以以不同的顺序手动运行两个更改集,但如果您始终运行master.xml
,那么您可以确保最后执行“更改所有者”。
从理论上讲,您可以将“master”更改日志与当前文件的名称相同。但由于文件名是变更集的“签名”的一部分,如果您已经通过现有文件部署了更改,我不会这样做。
自Liquibase 3.5.0以来,新的runOrder
属性有两个可能的值:first
和last
。将changeSet作为最后一个运行的示例:
<changeSet id="123" author="author0" runAlways="true" runOrder="last">
<sql> ... </sql>
</changeSet>
它尚未在文档中描述。发行说明:http://www.liquibase.org/2016/04/liquibase-3-5-0-released.html