2017-06-04 61 views
4

我的数据库背景来自Django框架(python)。在Django中,开始数据库迁移非常简单:Django migrations。 Django框架提供了基于模型创建迁移的工具,也是一种在数据库上应用迁移的工具。我认为这种做法既适用于开发,也适用于生产。您不必亲自编写迁移,该框架为您创建了它们。如何在Spring Boot中使用Hibernate处理数据库迁移?

现在我已经开始了一个Spring Boot和Hibernate的项目。我将我的应用程序配置为在JPA中使用hibernate。有了这些设置,我现在需要知道我的框架如何处理数据库迁移?我的意思是,如果我更改了一列,或者它是类型的,或者甚至可能将其删除,那么如何将数据库迁移到更改?我知道春季启动会自动检测启动时的列更改,并根据模型(实体的)创建不存在的列。我猜它是与可变

spring.jpa.hibernate.ddl-汽车

但它是如何处理现有的数据库对象?它是否也将列添加到它们,以及具有什么价值?我设定的默认值?如果我更改列类型会怎么样?它可以处理这个变化吗?从长远来看,这些设置和spring-boot自动化数据库管理可能还不够?

我想知道的是,如何使用Spring Boot和Hibernate组合来处理数据库迁移的最佳实践是什么?我相信有一个标准,这个组合的大多数人如何处理迁移?我希望它像Django一样容易......我知道flyway,但不知道我是否真的需要它,或者如果它与我的这种组合(包括spring boot和hibernate)有很大关系。

+2

是的,Flyway和liquibase都是很好的数据库迁移工具。你使用spring和hibernate的事实是无关紧要的。如果你需要迁移数据库,他们是不错的选择。 ddl-auto不是数据库迁移工具。它只是一个快速入门的方法,并从头开始生成一个模式,恕我直言。不是我曾经用过的产品。 –

回答

5

Liquibase或Flyway是版本控制/处理数据库迁移的两个主要选项。 ddl-auto是快速和肮脏的,但它不,也不能考虑需要处理的所有事情。这也是竞争条件的机会(两个实例试图同时更新DDL)。

这个答案在生产环境中更详细地介绍了ddl-auto,为什么你不应该这样做。

Hibernate: hbm2ddl.auto=update in production?

https://www.credera.com/blog/technology-insights/java/liquibase-fed-inconsistent-schemas/对为什么/概念的更多信息位。