首先,一点背景。我有一组 Java 应用程序,有些基于 JPA,有些则不是。为了创建我的数据库,我目前正在使用 Hibernates 模式导出来为使用 JPA 的用户生成创建脚本。那些不使用 JPA 的我手动生成脚本。然后在使用 ANT 安装应用程序期间运行这些。对于更新,应用程序安装程序只需将更新脚本应用于数据库。
为了改进数据库更新的管理,我一直在研究 Flyway 和 Liquibase。两者似乎几乎都在做我想做的事(除此之外:我现在更喜欢 Flyway,因为我们拥有所有预先存在的 SQL/DDL 脚本)。我可以看到的问题是它们都直接更新数据库。这对于很多安装都很好,但不是全部。
我想做的是针对数据库运行 Flyway/Liquibase 并生成一个更新脚本,其中包含使数据库保持最新状态所需的所有更新 - 包括 Flyway/Liquibase 需要对其自己的表进行的任何更改。这将允许我(或更重要的是数据库管理员)在应用程序之外运行更新脚本来更新数据库。然后我可以在我的应用程序中使用 Flyway/Liquibase 来验证数据库是否是最新的。
是否可以使用 Flyway 或 Liquibase 或任何其他工具来做到这一点?