Flyway 在迁移之前执行一些脚本以在我的模式中提供一些存储过程

Flyway to execute some scripts before migrations to provide some sprocs in my schema

我有一个包含所有存储过程的内部库,用于创建一些审计 table 和 table 的触发器,我将来会添加为迁移脚本,我想要这些存储过程在任何迁移运行之前部署到我的模式。我有一个特定的 DDL 可以做到这一点。我希望这样做的原因是每当我需要添加一个新的 table 时,我都可以调用此存储过程来创建这些触发器并审核 table。这样我的迁移脚本会更干净 simpler.Also,这将有助于保持 H SQL 和 oracle 脚本尽可能同步,因为我不关心 H [=] 的审计或触发器27=] 在做开发工作时。

我已将 DLL 运行 存储过程从库中提取到一个文件夹中,它位于一个单独的文件夹中,因为我希望将它们与我的迁移脚本分开。

我没有创建 Flyway bean,因为 spring boot 为我创建了它。我没有看到任何用于创建回调的属性配置。

我正在使用 spring boot 1.3.3-RELEASE 并且更喜欢使用带有 spring boot parent dependencies 的 flyway 3.2.1。

有人可以建议最好的方法吗?

如果有更高版本的 flyway 支持此功能,您是否建议覆盖我们 spring 提供的特定版本的 flyway 使用新版本启动?

选项 1:

使用callbacks。 Flyway 版本 3.x 支持这些在版本 4 中得到改进。这包括 beforeMigratebeforeEachMigratebeforeBaseline 的挂钩,这正是您所追求的。

有几种方法可以做到这一点:

  1. 将命名为 SQL 的文件(例如 beforeMigrate.sql、beforeEachMigrate.sql)添加到迁移目录。

  2. 使用 callbacks属性.

  3. 配置回调 Java 类
  4. spring-启动提供 FlywayMigrationStrategy to hook into the lifecycle and get access to the Flyway object. See the spring-boot Flyway documentation.

选项 2。

将这些存储过程添加到 V__1,以便它们可以从每个后续迁移中调用。意味着您将不得不放弃将它们与迁移分开的愿望 - 但要简单得多。

 @Component 
public class FlywayFactory implements FlywayMigrationStrategy {      

@Override     
public void migrate(Flyway flyway) {         
flyway.setCallbacks(new FlywayCallbackService());         
flyway.migrate();     
}
 }

这完成了工作。感谢@markdsievers

的回答