Gradle flyway 脚本更新多个数据库
Gradle flyway script to update multiple databases
我有一个 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
块会覆盖原始的飞路配置,所以如果我想在 flywayMigrate2
之后到 运行 flywayMigrate
它将继续使用第二组配置值而不是恢复到原始设置。
我不是第一个需要这样做的人,但我正在努力寻找合适的方法,有人可以帮忙吗?
我认为您不必定义另一个 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 插件遵循以下配置顺序:
- 系统属性
- 环境变量
- 自定义配置文件
- Gradle 属性
- build.gradle
中的飞路配置部分
<user-home>/flyway.conf
- Flyway Gradle 插件默认值
或者,您可以引入一个新任务来覆盖 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'
}
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
}
我有一个 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
块会覆盖原始的飞路配置,所以如果我想在 flywayMigrate2
之后到 运行 flywayMigrate
它将继续使用第二组配置值而不是恢复到原始设置。
我不是第一个需要这样做的人,但我正在努力寻找合适的方法,有人可以帮忙吗?
我认为您不必定义另一个 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 插件遵循以下配置顺序:
- 系统属性
- 环境变量
- 自定义配置文件
- Gradle 属性
- build.gradle 中的飞路配置部分
<user-home>/flyway.conf
- Flyway Gradle 插件默认值
或者,您可以引入一个新任务来覆盖 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'
}
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
}