迁飞/ Liquibase的数据库结构和DBUnit的为数据库插入?(Flyway/Liquibas

2019-09-17 08:21发布

我有我的应用程序中的以下情形:

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

对于数据库迁移,我们使用Hibernate架构更新的模式和DBUnit的为全部填充生产数据(在所有服务器/计算机)。 当架构更新完成后我产生新的模式一个新的DTD文件,所以我可以做的DBUnit的XML的全新进口。 该应用程序更新数据库在与XML文件启动(仅在开发和测试的服务器/电脑!)

当然,这种方法不是最佳的,脆弱的。 所以,我看着Liquibase和迁飞。 这两个似乎是很好的工具,但我不明白的是:我如何迁移数据? 就我而言,我倾倒生产系统每周一次的数据,并把它添加到应用程序的源代码控制作为DBUnit的XML文件,因此所有的开发商有“新鲜”的数据和测试服务器具有当前的生产数据,太。

我Liquibase和迁飞看到的问题是,有没有解决如何从数据库中的数据做自动化的比较和自动生成的迁移变化。

所以我的想法是通过以下步骤如下:

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

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

这将是真棒如果有人能提供给我提示如何处理我的方案:)

Answer 1:

如果你的目标是开发和测试环境中使用PROD数据库的转储,我将:

  • 配置数据库迁移工具,应用程序启动运行(包括迁徙路线和Liquibase通过各自的API支持它)。
  • 与应用程序包中的所有DB结构一起迁移
  • 转储从PROD数据和结构

这样一来,当PROD数据库还原到DEV或TEST,迁移工具的旧的元数据表格被恢复为好。

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

无需使用DbUnit这一点。



Answer 2:

简短的回答是,所有的修改将通过Liquibase或迁飞来完成。

我们使用的迁徙路径,具有相同的督促/测试/开发设置。 我们使用迁飞迁移脚本,存储在源控制所有分贝的变化(结构或元数据)。 我们每次做一个新的部署环境的时候,我们首先运行迁移脚本有(使用命令行工具或Maven插件)。 代码首先去开发环境,获取集成测试,并有不断去测试和生产。

主要的事情需要注意的是,迁飞需要一个线性版本的文件,所以如果两个开发商在迁移的同时检查,其中一人将不得不重新命名他们的。



文章来源: Flyway/Liquibase for Database Structure and DBUnit for Database Inserts?