我正在开发一个 Spring/Hibernate/MySql 应用程序。该应用程序尚未投入生产,我目前使用 Hibernate 的 hbm2ddl 功能,该功能对于管理域上的更改非常方便。我还打算使用 Flyway 进行数据库迁移。
在未来的某个时候,该应用程序将首次投入生产,这导致了我的第一组问题:
- 用于架构创建的最佳实践是什么(应用程序首次发布到生产环境中)?具体来说,我应该让 Hibernate 的 hbm2ddl 在生产数据库上创建架构,还是让 Flyway 使用 SQL 脚本创建第一个架构?如果第二个选项(即 Flyway)更可取,那么我应该从 hbm2ddl 创建的数据库生成 SQL 脚本吗?
然后假设我的应用程序的第一个版本正在生产中运行,并且我打算使用 Hibernate 的 hbm2ddl 继续开发应用程序的第二个版本。
- 我将如何管理对域的更改,特别是计算数据库架构的版本一和版本二之间的差异,以便在版本二发布到生产环境期间迁移数据库?
最佳答案
最好的权衡是仅使用 hbm2ddl 进行集成测试,使用 Flyway 进行运行时,无论是 QA 测试还是生产环境。
您也可以使用 hbmddl 作为 Flyway 第一个脚本的基础,但是每次更改 JPA 模型时,您都需要手动创建一个新的更新脚本,这无论如何也不那么困难。这也将允许使用数据库特定功能。
由于集成测试和运行时使用不同的策略,因此必须编写一个系统集成测试来比较 hbmddl 和 Flyway 创建的模式。同样,这也不难,只需要确保与实际生产数据库(而不是内存中集成测试数据库)进行比较。
关于java - 使用 Flyway 和 Hibernate 的 hbm2ddl 在应用程序的生命周期中管理数据库模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24229529/