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

用于更新多个数据库的Gradle flyway脚本,gradle,flyway,Gradle,Flyway,我有一个Gradle脚本,它使用flyway插件创建一些数据库表,现在我需要更新该脚本,以便它可以使用两组独立的flyway脚本,每个脚本更新一个独立的数据库 在脚本的单数据库版本中,我只需执行以下操作: flyway { url = 'jdbc:edb://localhost:5432/mydb' schemas = ['my_schema'] user = 'my_user' password = 'my_pass' locations = ['fil

我有一个Gradle脚本,它使用flyway插件创建一些数据库表,现在我需要更新该脚本,以便它可以使用两组独立的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

任务flywayMigrate2我不认为为了引入第二个Flyway配置,您必须定义另一个Gradle任务

根据您的需要,您只需使用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
或系统属性

gradle -Pflyway.user=myUsr -Pflyway.schemas=schema1,schema2 -Pflyway.placeholders.keyABC=valXYZ
gradle -Dflyway.user=myUser -Dflyway.schemas=schema1,schema2 -Dflyway.placeholders.keyABC=valueXYZ
或提供外部飞行通道配置

gradle -Dflyway.configFiles=path/to/myAlternativeConfig.conf flywayMigrate
Flyway Gradle插件遵循以下配置顺序:

  • 系统属性
  • 环境变量
  • 自定义配置文件
  • 梯度性质
  • build.gradle中的Flyway配置部分
  • /flyway.conf
  • Flyway Gradle插件默认值
  • 或者,您可以引入一个覆盖Flyway渐变属性的新任务

    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任务通用的属性。每个任务都有可以配置的属性,我猜任务级属性会覆盖
    flyway{…}
    extension对象上配置的属性

    我认为您应该在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
    }
    

    另请参见

    谢谢,我需要将flyway配置值包含在构建脚本中,而不是在命令行中传递。我认为您的project.ext示例所做的事情与我的flywayMigrate2任务相同,即覆盖任务完成后将保留的全局值