【问题标题】:Can Liquibase detect if it has already run?Liquibase 可以检测它是否已经运行?
【发布时间】:2014-08-08 16:40:06
【问题描述】:

我有一小部分脚本来管理应用的构建/测试/部署。最近我决定要切换到 Liquibase 进行数据库模式管理。该脚本既可以在开发人员机器上运行,也可以在开发人员机器上运行并重建他们的数据库,也可以在我们只会添加新变更集的部署环境上运行。

当这个程序第一次在已部署的环境中运行时,我需要检测 Liquibase 是否已运行,然后运行 ​​changelogSync 以与现有表同步。

除了手动检查数据库更改日志表是否存在之外,Liquibase API 是否有办法让我知道它已经运行了至少一次?

我在 Groovy 中使用 Java 核心库

【问题讨论】:

    标签: liquibase


    【解决方案1】:

    最简单的方法大概是((StandardChangeLogHistoryService) ChangeLogHistoryServiceFactory.getInstance().getChangeLogService(database)).hasDatabaseChangeLogTable()

    liquibase.changelog.ChangeLogHistoryServiceFactory 返回的 ChangeLogHistoryService 接口没有检查表是否存在的方法,但 StandardChangeLogHistoryService 实现有。

    【讨论】:

    • 所以当我尝试得到它时,我得到了一个类转换异常。我认为那是因为我从未注册过与这家工厂的数据库连接。查看代码对我来说并不明显如何做到这一点?
    • 我需要更多关于类转换异常的详细信息才能确定问题所在。
    • 完全按照您提供的代码执行我得到的代码:无法将具有类 'liquibase.changelog.ChangeLogHistoryServiceFactory' 的对象 'liquibase.changelog.ChangeLogHistoryServiceFactory@412beeec' 转换为类 'liquibase.changelog.StandardChangeLogHistoryService'跨度>
    • 抱歉,错过了从 ChangeLogHistoryServiceFatory 获取 changeLogService 的调用。我在示例中添加了 .getChangeLogService(database)。
    猜你喜欢
    • 2018-08-10
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 2011-05-07
    • 2014-10-29
    • 1970-01-01
    • 1970-01-01
    • 2013-12-28
    相关资源
    最近更新 更多