gradle - 使用 flyway 迁移 gradle 插件管理多个数据库

标签 gradle flyway

我们有两个数据库,我们想使用 flyway 的 gradle 插件来管理它们的迁移。

我想要一个可以迁移两个数据库的任务。但是,我似乎无法从单个任务中调用两次 flywayMigrate 任务。

这就是我所拥有的...

task migrateFoo() {
    doFirst {
        flyway {
            url = 'jdbc:mysql://localhost/foo'
            user = 'root'
            password = 'password'
            locations = ['filesystem:dev/src/db/foo']
            sqlMigrationPrefix = ""
            initOnMigrate = true
            outOfOrder = true
        }
    }
    doLast {
        tasks.flywayMigrate.execute()
    }
}

task migrateBar() {
    doFirst {
        flyway {
            url = 'jdbc:mysql://localhost/bar'
            user = 'root'
            password = 'password'
            locations = ['filesystem:dev/src/db/bar']
            sqlMigrationPrefix = ""
            initOnMigrate = true
            outOfOrder = true
        }
    }
    doLast {
        tasks.flywayMigrate.execute()
    }
}

task migrate(dependsOn: ['migrateFoo','migrateBar']) {}

从命令行显式调用 migrateFoo 或 migrateBar 可以正常工作,但是,如果我尝试调用 migrate 任务,则只会更新数据库 foo 。

migrateBar 任务的 doFirst 和 doLast 任务都被调用,但是,tasks.flywayMigrate.execute() 任务不会从 migrateBar 被第二次调用。

如何让 flyway 从单个任务中迁移 foo 和 bar?

最佳答案

首先,你不应该调用execute()在一项任务上(坏事会发生)。此外,每次 Gradle 调用最多执行一次任务。

要回答您的问题,flyway 插件显然不支持具有多个相同类型的任务。看看它的实现,我认为你将不得不推出自己的任务。就像是:

import com.googlecode.flyway.core.Flyway
import org.katta.gradle.plugin.flyway.task.AbstractFlywayTask

class MigrateOtherDb extends AbstractFlywayTask {
    @Override
    void executeTask(Flyway flyway) {
        // set any flyway properties here that differ from
        // those common with other flyway tasks
        println "Executing flyway migrate"
        flyway.migrate()
}

task migrateOtherDb(type: MigrateOtherDb)

我建议提交功能请求以支持相同类型的多个任务,并以方便的方式配置它们。

关于gradle - 使用 flyway 迁移 gradle 插件管理多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18136038/

相关文章:

postgresql - 使用 docker 容器从 6.3.1 到 8.5.x 的 Flyway 版本迁移问题

gradle - 是否有 Gradle 插件来格式化 build.gradle 文件?

gradle - 为什么此gradle任务缺少源?

java - 如何在 build.gradle 项目中添加类路径依赖项?

spring-boot - Java 是否有类似于 .Net Framework 和 Entity Framework 的迁移工具

spring-boot - Spring boot Flyway Jooq Code gen maven插件顺序

java - 使用 java 进行 Flyway 迁移

postgresql - 基于函数的数据库的非线性开发与版本控制

gradle - 使用Gradle创建具有外部依赖关系的jar

java - 在 Android Instrumentation 测试中使用 PowerMock 和 Mockito - 错误 - 重复文件 - org.mockito.plugins.MockMaker