4

目前我正在使用liquibase.integration.spring.SpringLiquibasebean将 Liquibase 与我的 spring 应用程序集成

从 java doc 中,tt 很可能知道sqlOutputDir该 bean 类有一个属性,以便 sql 可以输出到外部文件。

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

equivalent method or function那么,问题是,将 changeLog sql 输出到外部文件的当前是什么,或者该功能已经被完全删除了?

请给个提示,非常感谢。

4

2 回答 2

6

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

@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 更新。

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

于 2013-03-27T17:48:16.423 回答
1

看一下updateSQL命令。

于 2012-08-28T07:20:22.810 回答