多年来,我们一直使用flyway来维护数据库脚本,并且它的工作非常出色。 但是,在一种情况下,我并不十分高兴-可能有人在那里解决了问题:
为了减少所需的脚本数量(以及为了保持有关定义过程的“位置”的概述),我想在一个脚本中实现我们的功能/过程。每次更改过程(或开发新过程)时,都应更新该脚本-可重复的脚本对于此目的听起来很完美,但不幸的是,它们并非如此。
缺点是,不可重复脚本无法访问新过程,因为最后执行可重复脚本,因此不可重复脚本执行时该过程不存在。
我希望可以通过指定不同的位置来控制此操作(例如loc_first包含要首先执行的可重复对象,loc_normal用于标准脚本,最后要执行的可重复对象)。
不幸的是,位置顺序对执行顺序没有影响;-(
应对这种情况的正确方法是什么?现在,我需要在不可重复的脚本中指定相应的过程,但这正是我要避免的....
答案 0 :(得分:1)
我自己找到了一种解决方法:我直接在Maven中使用flyway(当然,如果您使用API,同样可以使用)。我的Maven脚本的每个阶段都有其自己的配置文件(指定URL等)
现在我为每个阶段创建两个配置文件-因此我有dev和devProcs。
这两个Maven概要文件之间的区别在于,“ [stage] Procs”概要文件在不同的位置上运行(仅保留可重复的脚本维护过程)。然后我需要执行两次飞行-首先使用[stage] Procs,然后使用[stage]。
对我来说,这看起来有点混乱,但是至少我可以用这种可重复的脚本来维护我的过程。
答案 1 :(得分:0)
根据flyway docs,可重复的迁移总是在版本迁移后执行。
但是,我想您可以使用Flyway callbacks。看起来beforeMigrate.sql
回调正是您所需要的。