【问题标题】:Is there any way to execute repeatable flyway scripts first?有没有办法先执行可重复的飞行脚本?
【发布时间】:2020-08-01 18:38:52
【问题描述】:

多年来,我们一直使用 flyway 来维护我们的数据库脚本,它做得非常好。 然而,有一种情况让我不太高兴——可能有人有解决方案:

为了减少所需的脚本数量(也为了了解我们的程序定义的“位置”),我想在一个脚本中实现我们的功能/程序。每次程序更改(或开发新程序)时,都应更新此脚本 - 可重复的脚本听起来非常适合此目的,但不幸的是它们不是。

缺点是不可重复脚本无法访问新过程,因为可重复脚本最后执行,因此不可重复脚本执行时该过程不存在。

我希望我可以通过指定不同的位置来控制这一点(例如,loc_first 包含我想首先执行的可重复项,loc_normal 用于标准脚本和要最后执行的可重复项)。

不幸的是,位置的顺序对执行顺序没有影响;-(

处理这种情况的正确方法是什么?现在我需要在不可重复的脚本中指定相应的过程,但这正是我想避免的......

【问题讨论】:

    标签: flyway


    【解决方案1】:

    根据flyway docs,可重复迁移总是在版本化迁移之后执行。

    但是,我想,你可以使用Flyway callbacks。看起来,beforeMigrate.sql 回调正是您所需要的。

    【讨论】:

    • 我不确定....文档明确表示可重复迁移适合(重新)创建视图/过程/功能/包/...但是...“如何”使用不可重复脚本中的过程,当它不可用时(还)?我认为 beforeMigrate.sql 用于内务管理(如重新编译程序等) - 但不是更新“生产代码”。
    【解决方案2】:

    我自己找到了一个解决方法:我直接将 flyway 与 maven 一起使用(当然,如果您使用 API,同样可以使用)。我的 maven 脚本的每个阶段都有自己的配置文件(指定 URL 等)

    现在我为每个阶段创建两个配置文件 - 所以我有例如开发和开发过程。

    这两个 maven 配置文件之间的区别在于,“[stage]Procs”配置文件在不同的位置运行(仅保留维护过程的可重复脚本)。然后我需要执行两次 flyway - 首先使用 [stage]Procs 然后使用 [stage]。

    对我来说,这看起来有点混乱,但至少我可以通过这种方式在可重复的脚本中维护我的程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 2021-10-06
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 2021-12-15
      • 1970-01-01
      相关资源
      最近更新 更多