gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 12:16:37 24 4
gpt4 key购买 nike

我有一个 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/

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