当前位置: 首页 > 知识库问答 >
问题:

在迁移之前执行一些脚本,在我的模式中提供一些存储过程

史高阳
2023-03-14

我有一个内部库,其中包含所有sprocs,用于为将来将作为迁移脚本添加的表创建一些审计表和触发器,并且我希望在任何迁移运行之前将这些sprocs部署到我的架构中。我有一个特定的DDL可以做到这一点。我想要这种方式的原因是,每当我有一个需要添加的新表时,我都可以调用此sproc来创建这些触发器和审核表。这样,我的迁移脚本将更清晰,更简单。此外,这将有助于保持H SQL和oracle脚本尽可能同步,因为我在进行开发工作时不关心H SQL的审核或触发器。

我已经从库中提取到一个文件夹中运行spros的DLL,它位于一个单独的文件夹中,因为我想将它们与我的迁移脚本分开。

我没有创建Flyway bean,因为springboot为我创建了它。我没有看到任何属性配置来创建回调。

我正在使用Spring启动1.3.3-RELEASE,并且更喜欢使用带有Spring启动父依赖项的flyway 3.2.1。

有人可以建议最好的方法来做到这一点吗?

如果有更高版本的flyway支持这一点,你会建议用新版本覆盖spring boot提供的flyway的we specific版本吗?

共有2个答案

郤飞英
2023-03-14
 @Component 
public class FlywayFactory implements FlywayMigrationStrategy {      

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

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

夹谷俊远
2023-03-14

选项1:

使用回调。Flyway 版本 3.x 支持这些内容,并在版本 4 中进行了改进。这包括迁移前迁移前基线之前的钩子,这就是您所追求的。

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

> < li>

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

使用< code>callbacks属性配置回调Java类。

spring boot提供了<code>FlywayMigrationStrategy</code>,以连接到生命周期中,并访问<code〕Flyway</code>对象。请参阅Spring护套Flyway文档。

选项2。

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

 类似资料:
  • 问题内容: 我的页面上有一个表单。该表单包含一个文本框和一个提交按钮。 提交表单后,通过单击按钮或在文本框中按Enter,我要进行查找(在这种情况下,使用Bing Maps对邮政编码进行地理编码),然后像往常一样将表单提交到服务器。 我当前的方法是将提交事件的处理程序添加到一个表单中,然后在完成后调用Submit(),但是我无法使它正常工作,并且无法调试问题: 问题答案: 是你的朋友在这里。在完成

  • 我想将这个Spring属性文件用于数据库配置。 代码运行良好,但不幸的是,当删除所有表后数据库为空时,我会收到SQL错误,因为首先执行迁移脚本。 如何先配置 JPA 以创建表,然后再执行迁移脚本?

  • Flyway在其留档中说明了可重复迁移的一些用法: 用法:(重新)创建视图/过程/函数/包/... 我想在可重复迁移中创建一些触发器/函数,这些稍后会在版本迁移中引用,并应用到表中。 Flyway最后运行可重复的迁移,这意味着触发器在被引用时不存在。 是否可以在版本化迁移之前运行某些可重复的迁移? 是否不支持此用例,因为自动更新应用于表的触发器是不好的做法?

  • 在使用可重复迁移时,我观察到一些奇怪的飞行路线行为。文件指出: 在一次迁移运行中,可重复迁移始终在所有挂起的版本化迁移执行完毕后最后应用。 但在我的例子中,可重复迁移(正在重新创建一个DB视图)似乎失败了,因为它是在版本化迁移之前执行的。 迁移前的Flyway信息数据:

  • 我有一些库脚本:lib1。groovy: lib2.groovy: lib3.groovy: 并希望在另一个脚本中使用它们:conf.groovy: conf.groovy是由用户配置的,他不知道我的后台lib脚本!他只知道提供的方法/任务:a()、b()、c()。实际上,我创建lib脚本是为了简化用户。 有没有办法将lib目录中的所有脚本(脚本lib1、lib2m、lib3)都包含到conf.g

  • 问题内容: 根据Docker文档:Dockerfile中只能有一条CMD指令。如果您列出多个CMD,则只有最后一个CMD才会生效。 我希望在CMD命令(本例中为init)之前执行一个简单的bash脚本(处理docker环境变量)。 有什么办法吗? 问题答案: 使用自定义入口点 创建一个可以执行所需操作的自定义入口点,然后最后执行您的CMD。 注意 :如果您的映像已经定义了一个自定义入口点,则可能需