按上下文名称运行Liquibase更改集

时间:2017-09-19 13:09:01

标签: java liquibase

有没有办法只使用Liquibase API运行一组变更集?

以下代码在启动集成测试类之前初始化整个架构:

liquibase = new Liquibase(
    LIQUIBASE_CHANGELOG_PATH,
    new FileSystemResourceAccessor(),
    new JdbcConnection(embeddedTestDatabase.getConnection())
);
liquibase.dropAll();
liquibase.update(""); // PROBLEM: for some reason this launch all changesets including changesets with name `test`

现在我想在特定的测试方法之前做一些像DBUnit' @DatabaseSetup这样的事情 - 意味着只用test上下文执行变更集:

liquibase.update("test"); // PROBLEM : this also run all changesets

<changeSet author="me" id="some_id" logicalFilePath="some_path" context="test">
    <sql>
        INSERT INTO COMPANY (ID, CREATED_AT, CREATED_BY, NAME) VALUES (1, '2017-09-15 16:55:57.558', 'My company');
    </sql>
    <rollback>
        DELETE FROM COMPANY;
    </rollback>
</changeSet>

1 个答案:

答案 0 :(得分:3)

是的,the "contexts" feature in Liquibase可以满足您的需求。

文档中给出的示例符合您的要求。

文档说明:

  

通过任何可用方法运行迁移器时,可以传入一组要运行的上下文。只会运行标有传递的上下文的changeSet。

     

如果您没有为changeSet分配上下文,它将一直运行,无论您将哪些上下文传递给迁移器。

所以我认为如果你不希望它们在这里运行,你需要在其余的迁移中添加“test”以外的上下文。也许“main”?