我的应用程序有以下方案:

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

    对于数据库迁移,我们使用架构和dbunit的Hibernate架构更新,以填写Alle Production数据(在所有服务器/计算机上)。当架构更新完成后,我为新架构生成一个新的DTD文件,因此我可以进行DBUNIT XML的新导入。应用程序在启动时使用XML文件更新数据库(仅适用于开发和测试服务器/计算机!) 当然,这种方法并不是最佳和脆弱。所以我看了液体酶和飞行道。似乎似乎是伟大的工具,但我没有得到的是:我如何迁移数据?在我的情况下,我每周将生产系统的数据转储一次,并将其添加到应用程序源控制作为DBUNIT XML文件,因此所有开发人员都有“新鲜”数据,测试服务器也具有当前的生产数据。

    我看到的问题是用液化和飞行器看到,没有解决方法如何从数据库数据中进行自动化,并自动生成迁移变化。

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

    1. 设置Hibernate以验证而不是更新。
    2. 在需要结构数据库时,我将它添加到主要版本的迁移脚本
    3. 迁移脚本中没有数据库插入。
    4. 基于新的数据库结构为dbunit生成新的dtd
    5. 从生产数据库生成DBUNIT XML。

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

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

有帮助吗?

解决方案

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

  • 配置DB迁移工具以在应用程序启动上运行(距离潮路和Liquibase都通过其各自的API支持这一点)
  • 包装所有DB结构迁移以及APP
  • 从prod 转储数据和结构

    这样,当prod数据库恢复为开发或测试时,也恢复了迁移工具的旧元数据表。

    当应用程序开始时,迁移工具将发现DB结构已过时并将其升级到最新版本。完成。

    不需要使用dbunit。

其他提示

简短的答案是你的所有变化都将通过Liquibase或Flyway来完成。

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

要注意的主要是,Flyway需要一个线性版本控制到文件,所以如果两个开发人员同时检查迁移,其中一个将不得不重命名它们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top