为什么flyway在将outOfOrder设置为true时会产生警告信息?

use*_*868 5 java flyway

outOfOrder设置为true 时,我在日志中收到以下警告消息:

警告:outOfOrder模式处于活动状态.迁移运行可能无法重现.

这条消息的确切含义是什么?如果有人能告诉我迁移发生时会发生什么,那将会很好.任何例子都会有所帮助.

Axe*_*ine 6

假设3次迁移:

  1. 创建两个名字'汤姆'和'杰里'
  2. 添加'米奇'作为第三个
  3. 将名称转换为大写

使用outOfOrder运行可能会导致您的迁移应用如下:

1,3,2 - >在DB:TOM,JERRY,Mickey

稍后重新运行它将产生

1,2,3 - >在DB中:TOM,JERRY,MICKEY

这就是为什么outOfOrder具有潜在危险性,并且第一次迁移可能无法重现.


pim*_*ttc 5

添加到 Axel 的答案中,不仅结果数据可能因顺序而异,而且迁移甚至可能无法实现。考虑:

迁移:

  1. 创建表 foo
  2. 添加列 foo.bar
  3. 将列重命名foo.barfoo.baz

执行顺序:

  • 1, 2, 3 ? foo有专栏baz
  • 1、3、……?错误应用 3:列foo.bar未找到
  • 2、……?错误应用 2:表foo找不到
  • 3、……?错误应用 3:foo找不到表

  • 那么,处理热修复的最佳实践是什么?似乎在人们在分支之间积极修补的环境中,您别无选择,只能启用无序迁移,因为较新的分支迁移将具有更高的 ID。无论选择何种迁移命名方案,我都无法调和如何维护旧的服务版本分支。迁移依赖项似乎是有序的,但这需要在内部实现并带有回调(诚然非常简单)。这仍然假设准确的依赖关系记录。 (2认同)