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 中得到改进。这包括 beforeMigrate
、beforeEachMigrate
和 beforeBaseline
的挂钩,这正是您所追求的。
有几种方法可以做到这一点:
将命名为 SQL 的文件(例如 beforeMigrate.sql、beforeEachMigrate.sql)添加到迁移目录。
使用 callbacks
属性.
配置回调 Java 类
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
的回答
我有一个包含所有存储过程的内部库,用于创建一些审计 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 中得到改进。这包括 beforeMigrate
、beforeEachMigrate
和 beforeBaseline
的挂钩,这正是您所追求的。
有几种方法可以做到这一点:
将命名为 SQL 的文件(例如 beforeMigrate.sql、beforeEachMigrate.sql)添加到迁移目录。
使用
callbacks
属性. 配置回调 Java 类
spring-启动提供
FlywayMigrationStrategy
to hook into the lifecycle and get access to theFlyway
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
的回答