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

Flyway-针对特定环境的不同迁移-Spring Boot

蔚和风
2023-03-14

我们正在Spring Boot App中的java中配置/开始我们的flyway迁移。

所以我们有sql和java迁移文件

在某些环境中,我们希望运行额外的迁移。基本上,在QA环境中,我们希望为DB准备测试数据。

所以我知道你可以在java中配置多个迁移位置。

所以我可以这样做

if(isQAenv == true)
{
Flyway.configure().locations("/db/migrations/","db/qaMigrations/")
else{
Flyway.configure().locations("/db/migrations/")
}

我的问题是版本控制和确保在所有环境中按预期执行内容。

我是否需要保持编号系统的正确顺序?

假设我有以下迁移脚本,应该在所有环境中运行

db/migrations/V1__table1.sql
db/migrations/V2__table2.sql
db/migrations/V4__table2.sql

此迁移仅在QA env中运行

db/qaMigrations/V3__insert_statements.sql

现在在非QA环境中,我的beacon_history_table有1,2,4的迁移。有什么方法可以避免这种情况,并在历史表中看起来更干净吗?

共有1个答案

汲昊空
2023-03-14

您可以使用配置文件轻松做到这一点,因此假设您有配置文件,即dev、prod,那么您可以轻松地在属性文件中为该配置文件定义spring.flyway.locations路径,或者在application.yml文件中为该配置文件的部分中定义路径。

spring:
  profiles: prod
  flyway:
    locations: classpath:/db/migration,classpath:/prod/db/migration
---
spring:
  profiles: dev
  flyway:
    locations: classpath:/db/migration,classpath:/dev/db/migration

或者,如果您有属性文件,那么您应该有文件,即application-dev.properties,然后

spring.flyway.locations=classpath:/db/migration,classpath:/dev/db/migration

上面提到的所有路径都应该位于resources文件夹中。

 类似资料:
  • 我在gradle中使用flyway,我在数据库控制台中手动运行了其中一个迁移,我想运行flyway,但告诉它忽略所有其他迁移版本之间的一个特定迁移版本。可以这样做吗?

  • 我正在flyway的CMD中运行命令,但脚本文件的迁移会出现以下异常 [错误]无法执行目标组织。flywaydb:flyway maven插件:3.2.1:在convertopia auto db:org项目上迁移(默认cli)。flywaydb。果心应用程序编程接口。FlywayException:验证失败。迁移1.0.53的迁移描述不匹配[错误]- 我尝试过,它说构建成功,但问题仍然没有解决。

  • 我们面临一个问题:假设一个开发人员在处理分支a的过程中提供了一个新的迁移版本,比如说V331,同时一个QA人员在另一个分支B的QA环境中进行QA。可能会出现qa环境已经有v331版本的情况,因为几个开发人员可能会在不同的时间在不同的分支上创建相同的版本号……更多的是qa经常在分支之间切换,这就是qa数据库变得混乱的原因,特别是表schema_version,这导致我们手动删除损坏的模式版本,解决旧

  • 请执行以下步骤: 1.debug打开; 2.把整个程序打包; 3.传到服务器; 4.数据库备份到服务器; 5.改data/conf/db.php的数据库用户名密码; 6.测试; 7.debug关闭;

  • 我正在尝试使用gradle脚本迁移一些SQL表: 在脚本目录中,我只有一个SQL脚本: 当我运行 时,我得到输出: 在测试数据库中,创建了schema_version表,但没有创建表位置。 flyway的目录结构是: 我是否缺少飞行路线的一些其他设置?非常不幸的是,我没有收到任何错误消息。

  • 我在一株嵌入的野花上做了阿奎利亚测试。尽管所有移植脚本、集成器类(flyway在其中安装)和所有FlyWay包(来自POM文件)都包含在。war文件(部署在嵌入式wildfly上),不进行迁移。 这有什么原因吗?这是原则上不起作用还是我错过了什么? 我喜欢实现的是,arquillian运行的自动测试将设置一个内存数据库,其方案与使用相同迁移脚本的生产数据库相同。 编辑:正如ytg下面所问的,我添加