使用flyway与分布式源代码管理(即Git,Mercurial等...)

时间:2014-07-07 03:23:20

标签: git database-migration flyway

我是一个包含多个模块(大约30个罐子)的大型java项目的一部分,并且对使用flyway管理数据库迁移感兴趣。

作为公司政策的一部分,与每个项目相关的迁移脚本存在于每个模块中,并且在迁移时聚合形成一个来自发布的大型sql脚本 - >发布。 (例如,构建234 - > 298)。另外值得注意的是,我们目前使用的是CVS(强制性的-_- face),并且正在将git视为替代品:)。

由于Git的分布式特性,考虑用于命名flyway迁移脚本的顺序版本号是违反直觉的。让我离题了......

方案

  • 用户将主A分支到其功能分支B
  • A的单独用户分支到他们自己的功能C
  • 有人向B提交了一个脚本。让我们称之为 script 1
  • 其他人向C提交了一个脚本。的 script 2
  • 在某些时候,这些更改会被带入主分支

现在,如果你还没有看到问题,那么这些更改被带入master的顺序是任意的。开发人员无法对其脚本进行适当的版本化(假设在团队中没有就提交顺序进行通信)。 script 2 可以在某个时候引入,迁移,之后 script 1 会被引入并放置在 script 2之前'用于飞路脚本版本的文件。

问题

当数据库已经迁移过去时,Flyway如何管理“插入”脚本?

这是我将当前系统转移到使用flyway的唯一问题之一,我们将不胜感激任何见解/帮助。

1 个答案:

答案 0 :(得分:1)

根据this blog,Flyway忽略了无序迁移(即它只迁移已迁移的最新版本的文件)。但是,flyway.outOfOrder属性可能设置为true,以便解决此排序问题。

flyway.outOfOrder=true

另一个有用的提示是,不使用版本的增量整数,而是使用Timestamps。时间戳越精确,版本冲突的可能性就越小。

e.g。

20140707.154401__create_customer_table.sql
20140707.154402__alter_customer_table.sql