如何从Liquibase生命周期调用Java代码?

时间:2013-04-22 20:44:13

标签: liquibase

我想在liquibase中应用更改集后运行代码。基本上我需要在将列添加到表后调用我的DBA提供的存储过程。我一直在挖掘Liquibase API,但还没有找到任何明显的东西。

谢谢, 赎金

1 个答案:

答案 0 :(得分:0)

今天早上还有一些时间和liquibase一起玩,并提出了这个,这不是很好,但应该适合我现在所拥有的。

    Database database = DatabaseFactory.getInstance().findCorrectDatabaseImplementation(new JdbcConnection(connection));
    Liquibase liquibase = new Liquibase("update.xml", new FileSystemResourceAccessor(), database);
    List<ChangeSet> changeSets = liquibase.listUnrunChangeSets(null);
    liquibase.update(null);
    for (RanChangeSet ranChangeSet: database.getRanChangeSetList()) {
        ChangeSet found = null;
        for (ChangeSet changeSet: changeSets) {
            if (ranChangeSet.isSameAs(changeSet)) {
                found = changeSet;
                break;
            }
        }

        if (found == null) {
            // ran previously
            continue;
        }
        System.out.println(ranChangeSet.getChangeLog());
        for (Change change: found.getChanges()) {
            if (change instanceof CreateTableChange) {
                System.out.println(( (CreateTableChange)change ).getTableName());
            }
            // handle others
        }
    }