java - 使用flywaydb时如何对存储过程进行版本控制?

标签 java sql-server stored-procedures database-migration flyway

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

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

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

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

最佳答案

从 3.0 开始,对此没有一流的支持。然而,有 3 种方法可以实现这一目标:

  • 使用自定义的 MigrationResolver,它可以连接到您使用的任何源代码控制并以这种方式检测更改
  • 使用 FlywayCallback 通过 afterMigrate 重新创建所有存储过程
  • 在单独的架构中使用单独的 Flyway 实例,并将 cleanOnValidationError 设置为 true。每次校验和更改时,架构都会被清理,并且由该 Flyway 实例管理的所有迁移都将重新运行

关于java - 使用flywaydb时如何对存储过程进行版本控制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23416130/

相关文章:

java - JFrame 部分透明

java processbuilder终端宽度

c# - 超时/结束日期事件的解决方案

c# - 如何使用动态创建的 IN 集创建存储过程

oracle - 在多个 pl/sql 调用中部分使用游标而不在包规范中定义它

MySQL存储过程where子句不过滤记录

Java Swing 更新 JTextArea 中的字符串

sql-server - 如何识别事务表?

java - mysql存储过程调用可以手动工作,但不能从java中调用

java - 在android中向HTTPservlet发送数据