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