当前位置: 首页 > 知识库问答 >
问题:

Gradle flyway脚本更新多个数据库

孟昆
2023-03-14

我有一个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']
}

我一直在尝试声明一个新任务来运行第二个数据库的脚本:

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配置,所以如果我想在flywayMigrate2之后运行flywayMigrate,它会继续使用第二组配置值,而不是恢复到原始设置。

我不可能是第一个需要这样做的人,但我正在努力寻找一种体面的方法,有人可以帮助吗?

共有2个答案

蒙洛华
2023-03-14

我不认为你必须定义另一个Gradle任务才能引入第二个Flyway配置。

根据留档,您只需使用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插件遵循以下配置顺序:

  1. 系统属性
  2. 环境变量
  3. 自定义配置文件
  4. 级配特性
  5. 构建中的飞行道配置部分。梯度
  6. <代码>

或者你可以引入一个新的任务来覆盖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'

}
潘畅
2023-03-14

<代码>飞行路线{...}扩展对象用于配置所有flyway任务共有的属性。每个任务也有可以配置的属性,我猜任务级属性会覆盖在< code>flyway {...}扩展对象。

我想你只需要在你的构建中配置两个飞途迁移任务实例

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

 类似资料:
  • 问题内容: 这是我的文件 我想在数组字段“ b”中找到元素并更新整个对象。我尝试了此脚本,但它没有更新。有任何想法吗? 问题答案: 使用此代替:

  • 问题内容: 我看到这对笨论坛 考虑以下代码 这显然是您在Codeigniter中这样做的方式 实际上这是行不通的。我看了一下生成的SQL,结果甚至没有提到联接。 有谁知道如何使用Codeigniter的Active Record数据库类对联接进行更新? 问题答案: 我发现的一种解决方案是完全删除联接并将联接条件移到“ where”函数中,此外,您还需要更改更新字符串以包括新表。

  • 本文向大家介绍Python 实现数据库更新脚本的生成方法,包括了Python 实现数据库更新脚本的生成方法的使用技巧和注意事项,需要的朋友参考一下 我在工作的时候,在测试环境下使用的数据库跟生产环境的数据库不一致,当我们的测试环境下的数据库完成测试准备更新到生产环境上的数据库时候,需要准备更新脚本,真是一不小心没记下来就会忘了改了哪里,哪里添加了什么,这个真是非常让人头疼。因此我就试着用Pytho

  • 问题内容: 我想编译一个安装程序,该安装程序将使用用户提供的凭据连接到远程数据库,然后使用.sql脚本安装一些数据库组件。 使用Inno Setup可以做到吗? 更多细节: 我想要一个自定义表单,要求用户输入数据库地址和凭据,然后运行将执行sql脚本的命令,该脚本将更新远程数据库服务器。 如果更新成功-成功完成安装。 这是一个相当普遍的问题-我有很多定制的设置应连接到不同的服务器/运行不同的脚本-

  • 本文向大家介绍Python 实现数据库(SQL)更新脚本的生成方法,包括了Python 实现数据库(SQL)更新脚本的生成方法的使用技巧和注意事项,需要的朋友参考一下 我在工作的时候,在测试环境下使用的数据库跟生产环境的数据库不一致,当我们的测试环境下的数据库完成测试准备更新到生产环境上的数据库时候,需要准备更新脚本,真是一不小心没记下来就会忘了改了哪里,哪里添加了什么,这个真是非常让人头疼。因此

  • 问题内容: 首先,有一点背景。我有一套Java应用程序,有些基于JPA,有些则没有。为了创建数据库,我目前正在使用Hibernates模式导出来为使用JPA的用户生成创建脚本。那些不使用JPA的人会手工生成脚本。然后使用ANT在应用程序安装过程中运行它们。对于更新,应用程序安装程序只需将更新脚本应用于数据库。 为了改善数据库更新的管理,我一直在研究Flyway和Liquibase。两者似乎几乎都可