Как вызвать код Java из жизненного цикла Liquibase?

Я хотел бы запустить код после применения наборов изменений в liquibase. По сути, мне нужно вызвать хранимую процедуру, предоставленную моим администратором баз данных, после добавления столбца в таблицу. Я копался в Liquibase API, но пока не нашел ничего очевидного.

Спасибо, Рэнсом


person Ransom Briggs    schedule 22.04.2013    source источник
comment
Наиболее очевидно для меня: используйте sql change, чтобы вызвать хранимую процедуру и поместить /включить это в самый конец основного сценария? Но я думаю, вы уже сталкивались с этим. Обязательно ли запускать SP только при добавлении нового столбца?   -  person Jens    schedule 24.04.2013
comment
Да, это просто склонность к человеческим ошибкам, если кто-то забывает, то все в плачевном состоянии.   -  person Ransom Briggs    schedule 24.04.2013


Ответы (1)


Сегодня утром у меня было немного времени, чтобы поиграть с 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
        }
    }
person Ransom Briggs    schedule 24.04.2013