我有一个包含所有sprocs的内部lib来为表创建一些审计表和触发器,我将来作为迁移脚本添加这些表,我希望在任何迁移之前将这些sprocs部署到我的模式运行。我有一个特定的DDL来做到这一点。我想要它的原因是每当我有一个我需要添加的新表时,我可以调用此sproc来创建那些触发器和审计表。这样我的迁移脚本就会更清晰,更简单。同时,这将有助于保持H SQL和oracle脚本尽可能同步,因为我不关心在开发工作时对H SQL进行审计或触发。
我已经从库中提取了运行sprocs的DLL文件夹,它位于一个单独的文件夹中,因为我希望它们与我的迁移脚本分开。
我没有创建Flyway bean,因为Spring boot是为我做的。我没有看到任何属性配置来创建回调。
我正在使用spring boot 1.3.3-RELEASE并且更喜欢使用flyway 3.2.1,它附带了spring boot parent依赖项。
有人可以提出最佳方法吗?
如果有更高版本的flyway支持此功能,您是否建议使用新版本覆盖我们特定版本的flyway提供的flyway?
答案 0 :(得分:1)
选项1:
使用callbacks。 Flyway版本3.x支持这些在版本4中得到改进的版本。这包括beforeMigrate
,beforeEachMigrate
和beforeBaseline
的钩子,这就是你所追求的。
有几种方法可以做到这一点:
将命名的SQL文件(例如beforeMigrate.sql,beforeEachMigrate.sql)添加到迁移目录。
使用callbacks
属性配置回调Java类。
spring-boot提供FlywayMigrationStrategy
以挂钩生命周期并访问Flyway
对象。请参阅spring-boot Flyway documentation。
选项2.
将这些存储过程添加到V__1
,以便每次后续迁移都可以调用它们。意味着你将不得不放弃将它们与迁移分开的愿望 - 但要简单得多。
答案 1 :(得分:0)
@Component
public class FlywayFactory implements FlywayMigrationStrategy {
@Override
public void migrate(Flyway flyway) {
flyway.setCallbacks(new FlywayCallbackService());
flyway.migrate();
}
}
这完成了工作。谢谢@markdsievers的回答