在我的spring-boot项目中,我使用了Flyway的开箱即用集成(org.flywaydb.flyway-core
),并且有一些迁移脚本,它们在启动时执行,并通过默认的flyway_schema_history
-table进行管理。
该项目还使用了一个自带flyway迁移脚本的模块,这些脚本是以编程方式迁移的,并在其他modulex_schema_history
表中跟踪迁移情况。
由于主项目的迁移需要对通过模块迁移创建的一些表进行操作,因此模块迁移需要在flyway-plugin迁移主项目脚本之前进行。
如何在主要应用的Fly集成开始之前,以编程方式执行模块迁移?Flyway-插件迁移是如何和何时触发的?
//edit:我尝试通过一个带有注释的@configuration
类在FlywayAutoConfiguration之前执行代码
@AutoConfigureBefore({FlywayAutoConfiguration.class})
@AutoConfigureAfter({DataSourceAutoConfiguration.class})
但不幸的是,该类仍然在FlywayAutoConfiguration
之后实例化。
//edit:我问了一个相关的(更一般的)问题:如何从模块中订购AutoConfiguration,以及如何从模块堆栈溢出中在Spring Boot配置类中使用@AutoConfigureOrder
如果在应用程序yaml/properies文件中正确配置了Flyway迁移,它将在启动期间启动。
为了在主应用程序迁移之前启动另一个flyway迁移,您可以使用flyway命令行或为另一个模块创建一个单独的custom_pom.xml
项目文件,并在执行主应用程序之前通过命令行mvn flyway:migrate
中的mvn插件触发它。
在使用可重复迁移时,我观察到一些奇怪的飞行路线行为。文件指出: 在一次迁移运行中,可重复迁移始终在所有挂起的版本化迁移执行完毕后最后应用。 但在我的例子中,可重复迁移(正在重新创建一个DB视图)似乎失败了,因为它是在版本化迁移之前执行的。 迁移前的Flyway信息数据:
我想将这个Spring属性文件用于数据库配置。 代码运行良好,但不幸的是,当删除所有表后数据库为空时,我会收到SQL错误,因为首先执行迁移脚本。 如何先配置 JPA 以创建表,然后再执行迁移脚本?
我在一株嵌入的野花上做了阿奎利亚测试。尽管所有移植脚本、集成器类(flyway在其中安装)和所有FlyWay包(来自POM文件)都包含在。war文件(部署在嵌入式wildfly上),不进行迁移。 这有什么原因吗?这是原则上不起作用还是我错过了什么? 我喜欢实现的是,arquillian运行的自动测试将设置一个内存数据库,其方案与使用相同迁移脚本的生产数据库相同。 编辑:正如ytg下面所问的,我添加
Flyway在其留档中说明了可重复迁移的一些用法: 用法:(重新)创建视图/过程/函数/包/... 我想在可重复迁移中创建一些触发器/函数,这些稍后会在版本迁移中引用,并应用到表中。 Flyway最后运行可重复的迁移,这意味着触发器在被引用时不存在。 是否可以在版本化迁移之前运行某些可重复的迁移? 是否不支持此用例,因为自动更新应用于表的触发器是不好的做法?
我正在做一个项目,我们使用flyway来升级我们的DB模式。 我正在通过插件使用。 多谢
在Spring启动应用程序中,我们在db.migrations资源文件夹中设置了版本化迁移 V1_0__create_table.sql V1_1__apply_roles.sql R__create_stored_proc.sql 版本化迁移(V1\u 0和V1\u 1)在应用程序启动时运行/验证,但似乎根本不会触发可重复迁移(R\u)。 我们有一个后迁移。sql,这似乎是触发的。 有人能帮我理