【问题标题】:Flyway/Liquibase for Database Structure and DBUnit for Database Inserts?用于数据库结构的 Flyway/Liquibase 和用于数据库插入的 DBUnit?
【发布时间】:2012-05-26 17:33:48
【问题描述】:

我的应用程序有以下场景:

  • 1 个生产服务器
  • 1 个测试服务器
  • n 开发计算机

对于数据库迁移,我们对 Schema 使用 Hibernate Schema Update,并使用 DBUnit 来填充所有生产数据(在所有服务器/计算机上)。模式更新完成后,我为新模式生成了一个新的 DTD 文件,因此我可以重新导入 DBUnit XML。应用程序在启动时使用 XML 文件更新数据库(仅在开发和测试服务器/计算机上!)

当然,这种方法不是最优且脆弱的。所以我研究了 Liquibase 和 Flyway。两者似乎都是很棒的工具,但我没有得到的是:如何迁移数据?就我而言,我每周转储一次生产系统的数据,并将其作为 DBUnit XML 文件添加到应用程序源代码管理中,因此所有开发人员都有“新鲜”数据,而测试服务器也有当前的生产数据。

我在 Liquibase 和 Flyway 中看到的问题是,没有解决方案如何从数据库数据中进行自动差异并自动生成迁移更改。

所以我的想法是以下步骤:

  1. 将休眠设置为验证而不是更新。
  2. 当需要更改 STRUCTURAL 数据库时,我将其添加到主要版本的迁移脚本中
  3. 迁移脚本中没有数据库插入。
  4. 根据新的数据库结构为 DBunit 生成新的 DTD
  5. 从生产数据库生成 DBUnit XML。

另一个想法是利用 flyways JavaMigration 并提供基于 DBUnit 的初始数据库转储。数据库数据的所有其他更改将在迁移脚本中处理。但是还是有问题:如何从当前迁移脚本状态和生产数据库状态进行差异化?

如果有人能给我提示如何处理我的场景,那就太棒了:)

【问题讨论】:

    标签: database dbunit liquibase flyway


    【解决方案1】:

    如果您的目标是在 DEV 和 TEST 环境中使用 PROD 数据库的转储,我会:

    • 将数据库迁移工具配置为在应用程序启动时运行(Flyway 和 Liquibase 都通过各自的 API 支持这一点)
    • 将所有数据库结构迁移与应用打包在一起
    • 从 PROD 中转储数据和结构

    这样,当 PROD 数据库恢复到 DEV 或 TEST 时,迁移工具的旧元数据表也会恢复。

    当应用启动时,迁移工具会发现数据库结构已经过时,并将其升级到最新版本。完成。

    不需要为此使用 DBUnit。

    【讨论】:

    • 我不确定如何使用这种方法生成数据差异迁移脚本......你能澄清一下吗? Flyway 是否有办法生成差异迁移脚本?
    • 据我了解,您每周都会进行所有完整的 PROD 转储。如果您仍然进行完整转储,为什么还需要数据差异?
    • 我想做的是创建一个迁移脚本,其中包含生产数据库中的所有新数据(也更改了数据)。因此,基本上,每周都有一个脚本向项目(和版本控制)添加一个新的 flyway 迁移脚本,其中包含所有数据库差异。据我了解flyway,这是推荐的方式(?)。我的数据库大小是几百兆字节。因此,每个完整的转储都检查到版本控制中(无论如何都不需要,因为只有少数数据集发生了变化)将是矫枉过正。
    【解决方案2】:

    简短的回答是,您的所有更改都将通过 Liquibase 或 Flyway 完成。

    我们使用 Flyway,具有相同的产品/测试/开发设置。 我们使用存储在源代码控制中的 Flyway 迁移脚本进行所有数据库更改(结构或元数据)。每次我们对环境进行新部署时,我们首先在那里运行迁移脚本(使用命令行工具或 maven 插件)。代码首先进入开发环境,在那里进行集成测试,然后继续进行测试和生产。

    主要需要注意的是,Flyway 需要对文件进行线性版本控制,因此如果两个开发人员同时签入迁移,其中一个将不得不重命名他们的。

    【讨论】:

      猜你喜欢
      • 2014-07-22
      • 1970-01-01
      • 2014-01-24
      • 2011-04-01
      • 1970-01-01
      • 2011-04-16
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      相关资源
      最近更新 更多