我们正在使用liquibase在spring boot应用程序中迁移数据库。在资源中,我们有一个主要的变更日志文件,其中包含其他变更日志(每个版本1个)。
我们通常通过liquibase的context属性来区分环境,但是新的我们需要区分数据,这些数据仅用于集成测试,并且不想将其放置在普通版本的脚本旁边。可以将这些集成测试脚本放在项目的测试范围内,并按常规脚本顺序执行它们吗?
例如:
主要变更日志:
<include file="version-1.xml"/>
<include file="version-2.xml"/>
和版本1样本:
<changeSet id="1ver_1" author="xxx">
<!-- creation of table foo_table -->
</changeSet>
<changeSet id="1ver_2" author="xxx">
<!-- adding column to table foo_table -->
</changeSet>
第2版示例:
<changeSet id="2ver_1" author="xxx">
<!-- renaming table foo_table to bar_table -->
</changeSet>
我需要,如果用于集成测试的脚本将在脚本1ver_1之后编写并包含插入内容,那么接下来执行1ver_2和2ver_1可以了。
因此,当开始进行集成测试数据库时,将以正确的顺序执行脚本:
什么是最佳做法?
答案 0 :(得分:0)
我认为您应该更改保存变更集的方式。看看Liquibase Best Practices。 因此,您的主变更日志应如下所示:
<include file="version-1.1.xml"/>
<include file="version-1.2.xml"/>
<include file="version-2.1xml"/>
如果执行此操作,则可以具有专用的主变更日志文件以进行集成测试。集成测试的changelog-master.xml如下所示:
<include file="version-1.1.xml"/>
<include file="test_data_version-1.1.xml"/>
<include file="version-1.2.xml"/>
<include file="version-2.1xml"/>
之后,您只需在集成测试中覆盖属性:
liquibase.change-log=classpath:integration-liquibase-changeLog.xml
此外,您还应该将integration-liquibase-changeLog.xml
和所有的'test_data_xx.xml'放入集成测试模块资源或测试资源中(取决于项目结构)。不应将其主要思想提供给生产工件。