Java 使用flywaydb时如何控制存储过程的版本?

Java 使用flywaydb时如何控制存储过程的版本?,java,sql-server,stored-procedures,database-migration,flyway,Java,Sql Server,Stored Procedures,Database Migration,Flyway,我目前有一个Java web应用程序,它使用Microsoft SQL Server后端。数据库迁移目前由sqlcmd手动完成,它使用:r命令引用存储过程和视图的脚本文件 这样,每个存储过程都有自己的文件“proc_someprocedure.sql”。迁移是通过升级脚本“6.1 upgrade.sql”完成的,该脚本引用proc文件删除并在当前版本中重新创建它 我们希望迁移到flyway,让应用程序在部署时迁移自己的数据库。但是,我找不到任何简单的方法为每个存储过程维护一个源代码文件。如果存储

我目前有一个Java web应用程序,它使用Microsoft SQL Server后端。数据库迁移目前由sqlcmd手动完成,它使用:r命令引用存储过程和视图的脚本文件

这样,每个存储过程都有自己的文件“proc_someprocedure.sql”。迁移是通过升级脚本“6.1 upgrade.sql”完成的,该脚本引用proc文件删除并在当前版本中重新创建它

我们希望迁移到flyway,让应用程序在部署时迁移自己的数据库。但是,我找不到任何简单的方法为每个存储过程维护一个源代码文件。如果存储过程发生更改,我需要在版本控制中的V_6_1_change.sql文件和proc_someprocedure.sql文件中进行更改


我试图避免复制/粘贴sql代码,因为它在过去一直困扰着我们。。其他人是如何处理这种情况的?

从3.0开始,没有一流的支持。但是,有三种方法可以实现这一点:

  • 使用一个定制的MigrationResolver,它钩住您使用的任何源代码管理,并以这种方式检测更改
  • 使用FlywayCallback通过afterMigrate重新创建所有存储过程
  • 在单独的架构中使用单独的Flyway实例,并将cleanOnValidationError设置为true。每次校验和更改时,将清除模式,并重新运行该Flyway实例管理的所有迁移

谢谢axel,我认为后迁移可能是实现这一点的最简单方法。谢谢你的洞察力!Flyway 4.0来营救!(via)