我的应用程序有以下场景:
- 1 台生产服务器
- 1 台测试服务器
- n 开发计算机
对于数据库迁移,我们使用 Hibernate Schema Update 来为 Schema 和 DBUnit 填充所有生产数据(在所有服务器/计算机上)。模式更新完成后,我为新模式生成了一个新的 DTD 文件,因此我可以重新导入 DBUnit XML。应用程序在启动时使用 XML 文件更新数据库(仅在开发和测试服务器/计算机上!)
当然,这种方法不是最优的和脆弱的。所以我研究了 Liquibase 和 Flyway。两者似乎都是很棒的工具,但我没有得到的是:如何迁移数据?就我而言,我每周转储一次生产系统的数据,并将其作为 DBUnit XML 文件添加到应用程序源代码管理中,因此所有开发人员都有“新鲜”数据,测试服务器也有当前生产数据。
我在 Liquibase 和 Flyway 中看到的问题是,没有解决方案如何从数据库数据中进行自动差异并自动生成迁移更改。
所以我的想法是以下步骤:
- 将 Hibernate 设置为验证而不是更新。
- 当需要更改 STRUCTURAL 数据库时,我将其添加到主要版本的迁移脚本中
- 迁移脚本中没有数据库插入。
- 根据新的数据库结构为 DBunit 生成新的 DTD
- 从生产数据库生成 DBUnit XML。
另一个想法是利用 flyways JavaMigration 并提供基于 DBUnit 的初始数据库转储。数据库数据的所有其他更改将在迁移脚本中处理。但仍然存在问题:如何从当前迁移脚本状态和生产数据库状态进行差异?
如果有人能给我提示如何处理我的场景,那就太棒了:)