LiquiBase - 任何方式将更改log sql输出到2.0.5中的文件?

时间:2012-08-27 18:55:49

标签: java spring liquibase

目前我正在使用liquibase.integration.spring.SpringLiquibase bean

将Liquibase与我的spring应用程序集成

从java doc来看,知道该bean类有一个属性sqlOutputDir,以便sql可以输出到外部文件,这是合理的。

但是,最新2.0.5中似乎不存在该功能。

所以,问题是,将changeLog sql输出到外部文件的当前equivalent method or function是什么,或者该功能是否已被永久删除?

请提示,非常感谢。

2 个答案:

答案 0 :(得分:6)

用于编写SQL输出的等效Java命令是:Liquibase#update(String, Writer)。您可以通过继承SpringLiquibase并覆盖afterPropertiesSet在Spring应用程序中调用此方法。例如:

@Bean
public SpringLiquibase liquibase() {
    SpringLiquibase liquibase = new SpringLiquibaseWriter();
    // ...
    return liquibase;
}

private static class SpringLiquibaseWriter extends SpringLiquibase {

    @Override
    public void afterPropertiesSet() throws LiquibaseException {

        try (Connection connection = getDataSource().getConnection()) {

            Liquibase liquibase = createLiquibase(connection);
            Writer writer; // ... get writer
            liquibase.update(getContexts(), writer);
            // ...

        } catch (LiquibaseException | SQLException e) {
            // handle
        }

        super.afterPropertiesSet();
    }
}

update(String,Writer)的调用将执行您的更改集而不实际更新数据库。对super.afterPropertiesSet的调用实际上会执行liquibase更新。

我确实注意到SpringLiquibase中提到的javadoc提及writeSqlFileEnabledsqlOutputDir属性。显然,这些已被删除,但javadoc未更新(请参阅CORE-1104)。我不确定这些选项被删除的原因或者预期的替代品是什么。我发现liquibase日志记录有点不足,所以这种方法对于记录(调试)liquibase SQL输出可能很有用。

答案 1 :(得分:1)

查看updateSQL命令。