用于更新多个数据库的 Gradle flyway 脚本

标签 gradle flyway

我有一个 Gradle 脚本,它使用 flyway 插件创建一些数据库表,现在我需要更新脚本,以便它可以使用 2 个单独的 flyway 脚本集,每个脚本更新一个单独的数据库。

在脚本的单数据库版本中,我只是这样做:

flyway {
    url = 'jdbc:edb://localhost:5432/mydb'
    schemas = ['my_schema']
    user = 'my_user'
    password = 'my_pass'
    locations = ['filesystem:src/main/resources/db/flyway/my_db']
}

我一直在尝试声明一个新任务来运行第二个数据库的脚本:
task flywayMigrate2 << {
    ext {
        flyway {
            url = 'jdbc:edb://localhost:5432/mydb2'
            schemas = ['my_schema2']
            user = 'my_user2'
            password = 'my_pass2'
            locations = ['filesystem:src/main/resources/db/flyway/my_db2']
        }
    }    
}

flywayMigrate2.finalizedBy flywayMigrate

我的 Gradle 技能很差,但我知道这不是正确的方法 - 我的理解是 ext块会覆盖原来的飞行路线配置,所以如果我想运行 flywayMigrate之后 flywayMigrate2它将继续使用第二组配置值,而不是恢复到原始设置。

我不能成为第一个需要这样做的人,但我正在努力寻找一种体面的方法,有人可以帮忙吗?

最佳答案

flyway { ... }扩展对象用于配置所有飞行任务通用的属性。每个任务也有可以配置的属性,我的猜测是任务级别的属性会覆盖在 flyway { ... } 上配置的属性。扩展对象。

我想你只需要配置两个 FlywayMigrateTask build.gradle 中的实例

import org.flywaydb.gradle.task.*

task migrate1(type: FlywayMigrateTask) {
    url = 'jdbc:edb://localhost:5432/mydb1'
    user = 'user1'
    locations = ['filesystem:src/main/flyway/db1/migration']
    // etc
}

task migrate2(type: FlywayMigrateTask) {
    url = 'jdbc:edb://localhost:5432/mydb2'
    user = 'user2'
    locations = ['filesystem:src/main/flyway/db2/migration']
    // etc
}

另见 AbstractFlywayTask.java

关于用于更新多个数据库的 Gradle flyway 脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47656711/

相关文章:

android - 仅用一种产品风格替换 main 中的 Java 文件

java - 如何将 Idea 模块添加到 gradle 的依赖项中

java - 在 spring boot @activeprofile 注解中配置 maven 配置文件

database - Flyway - 迁移到特定版本

postgresql - Flyway:支持旧数据库

java - 带参数的 @Immutable 类的构造函数无法从 .java 类访问

android - 无法修复项目,gradle问题

gradle - Gradle 中开箱即用的依赖项类型(配置)有哪些?

flyway - 定义的 SQL 文件序列需要使用 Flyway 工具逐个迁移

Spring boot + flyway + H2 in memory :Caused by: org. h2.jdbc.JdbcSQLException: Table "xxxx"not found; SQL语句: