有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java LiquiBase 2.0.5中是否有将更改日志sql输出到文件的方法?

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

从javadoc中,tt似乎知道该bean类有一个属性sqlOutputDir,以便sql可以输出到外部文件

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

所以,问题是,当前将changeLog sql输出到外部文件的equivalent method or function是什么,还是该功能已经被永远删除了

请给我一个提示,非常感谢


共 (2) 个答案

  1. # 2 楼答案

    用于编写SQL输出的等效Java命令是:Liquibase#update(String, Writer)。您可以在Spring应用程序中通过子类化SpringLiquibase并重写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的调用实际上将执行液化酶更新

    我注意到你在{}中提到的{a1}提到了{}和{}属性。显然,这些都被删除了,但是javadoc没有更新(参见CORE-1104)。我不确定这些选项被删除的原因,也不确定预期的替换是什么。我发现liquibase日志记录有点不足,因此这种方法可能有助于记录(调试)liquibase SQL输出