我有一个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']
}
我一直在尝试声明一个新任务来运行第二个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
块会覆盖原始的flyway配置,所以如果我想运行{{ 1}} flywayMigrate
之后,它将继续使用第二组配置值,而不是恢复到原始集。
我不能成为第一个需要这样做的人,但是我很难找到一个体面的方法,有人可以帮忙吗?
答案 0 :(得分:3)
flyway { ... }
扩展名对象用于配置所有flyway任务通用的属性。每个任务还具有可配置的属性,我的猜测是任务级别属性覆盖flyway { ... }
扩展对象上配置的属性。
我认为您只需在build.gradle中配置两个FlywayMigrateTask实例
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
}
答案 1 :(得分:1)
我不认为您必须定义另一个Gradle任务才能引入第二个Flyway配置。
根据documentation,您只需使用Gradle属性
覆盖gradle -Pflyway.user=myUsr -Pflyway.schemas=schema1,schema2 -Pflyway.placeholders.keyABC=valXYZ
或系统属性
gradle -Dflyway.user=myUser -Dflyway.schemas=schema1,schema2 -Dflyway.placeholders.keyABC=valueXYZ
或提供外部Flyway配置
gradle -Dflyway.configFiles=path/to/myAlternativeConfig.conf flywayMigrate
Flyway Gradle插件遵循以下配置顺序:
<user-home>/flyway.conf
或者,您可以引入一项新任务,覆盖Flyway的Gradle属性。
task migrate2(FlywayMigrateTask) {
project.ext['flyway.user']='myUsr'
project.ext['flyway.password']='mySecretPwd'
project.ext['flyway.schemas']='schema1,schema2,schema3'
project.ext['flyway.placeholders.keyABC']='valueXYZ'
project.ext['flyway.placeholders.otherplaceholder']='value123'
}