是否可以将Flyway,Liquibase等数据库迁移工具与应用程序代码库集成?

时间:2016-01-20 09:08:27

标签: java gradle database-migration liquibase flyway

我的意思是允许应用程序修改数据库是一种好习惯吗?或者数据库迁移是否应在应用程序代码库外部完成?

新的,所以任何输入都将受到赞赏。

我们正在使用java和gradle来构建应用程序。

3 个答案:

答案 0 :(得分:12)

Flyway作者在这里。

是的!在一天结束时,有两个重要的力量在起作用:

  1. 您的架构与您的应用程序代码紧密耦合:您的应用程序需要存在某些表和列,以便它可以读取&写信给他们。哪个版本与您的应用程序的一个版本完全不同。
  2. 您不希望在应用程序/服务之间进行基于数据库的集成,因为这会破坏所有封装。数据库是服务的私有实现细节。与其他服务的集成应该通过具有适当验证和业务规则实施的API层来实现。
  3. 鉴于这一切,只需将属于一起的东西保持在一起

    通过让应用程序migrate the database on startup,您可以确保数据库架构始终与应用程序对应该在应用程序中找到的内容保持同步。

答案 1 :(得分:1)

我完全赞同Axel保持这一点。

但是,如果您的数据库用户没有权利更改数据库结构或者您根本不应该更改结构,那么它就不会让工具直接运行结构更改而是生成SQL脚本。

然后可以将这些内容提供给数据库管理员,他们首先检查并批准SQL,然后自己运行。

这就是我们(必须)这样做的方式。

不要误会。这只是间接的一个层次。不要让工具直接执行SQL,而是让工具将SQL写入文件。然后DBA将从文件中执行SQL。

答案 2 :(得分:0)

不,除非你不知道:

  • 您有多个应用程序在同一个数据库中运行。因此,您需要选择一个包含所有脚本的文件。

  • 您需要能够回滚部署,否则您需要在每次启动时快照数据库。

  • 您的DBA为您的应用程序提供执行架构更改的能力,即在未经其批准的情况下进行架构更改。

通过将flyway目标版本与所有项目中的代码一起保存,可以轻松实现耦合代码和模式。