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

时间:2016-10-06 07:22:39

标签: spring-boot flyway

我有一个包含所有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?

2 个答案:

答案 0 :(得分:1)

选项1:

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

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

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

  2. 使用callbacks属性配置回调Java类。

  3. spring-boot提供FlywayMigrationStrategy以挂钩生命周期并访问Flyway对象。请参阅spring-boot Flyway documentation

  4. 选项2.

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

答案 1 :(得分:0)

 @Component 
public class FlywayFactory implements FlywayMigrationStrategy {      

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

这完成了工作。谢谢@markdsievers的回答