gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 04:20:03 24 4
gpt4 key购买 nike

我们有两个数据库,我们想使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com