如何将参数添加到 flyway build.gradle 文件?

Posted

技术标签:

【中文标题】如何将参数添加到 flyway build.gradle 文件?【英文标题】:How to add parameters to flyway build.gradle file? 【发布时间】:2020-12-22 14:08:28 【问题描述】:

我的 build.gradle 文件中有这个:

    flyway 
        url = 'jdbc:oracle:thin:@localhost:1521:DB'
        user = 'user'
        password = 'pass'
        driver = 'oracle.jdbc.OracleDriver'
        placeholderReplacement = true
        schemas = ['OWNER']

    println "PRINT ARG:"
    println testArg

    locations = ["filesystem:soem-path/common"]
    placeholders = [
            'some.store.owner': flyway.schemas[0],
            'some.user'           : 'USER',
    ]

在我使用 testArg 添加该部分后,构建总是失败。我想把它弄成这样:

./gradlew flywayMigrate -PtestArg=test -Dflyway.configFiles=../flyway/flyway-dev.properties -i

错误信息是:

Caused by: groovy.lang.MissingPropertyException: Could not get unknown property 'testArg' for object of type org.flywaydb.gradle.FlywayExtension.
    at org.gradle.internal.metaobject.AbstractDynamicObject.getMissingProperty(AbstractDynamicObject.java:87)
    at org.gradle.internal.metaobject.ConfigureDelegate.getProperty(ConfigureDelegate.java:130)

我怎样才能在那里获得房产?

【问题讨论】:

【参考方案1】:

我相信您的问题是,当您在 flyway 配置闭包(即 flyway ... 部分)内时,您的委托对象(即当您的本地代码中找不到属性时,什么类 gradle 看起来在下一个)是飞路扩展。换句话说,当您在 flyway ... 中时,gradle 将在 flyway 插件代码中查找您的代码中未立即找到的任何属性。

您正在寻找的是 gradle project 对象上的属性。例如,您可以执行以下操作:

ext 
  projectProperty =  name ->
    project.hasProperty(name) ? project.properties[name] : null
  


flyway  
  def testArg = projectProperty('testArg')
  println "project property testArg: $testArg"

(未经测试,但至少原则上应该可以工作)。

hasProperty 调用可确保在未为项目设置属性时代码不会中断。

有关 groovy 闭包委托的解释,groovy 语言文档有 a section specifically explaining this。

【讨论】:

【参考方案2】:

这行得通:

def devEnv = System.properties.containsKey("devEnv")


flyway 
    .....
    if (devEnv) 
        locations += "filesystem:some/path"
    
    ....

并像这样调用flyway:

./gradlew flywayClean -DdevEnv -Dflyway.configFiles=...

【讨论】:

以上是关于如何将参数添加到 flyway build.gradle 文件?的主要内容,如果未能解决你的问题,请参考以下文章

将 Flyway 添加到 MySQL Docker 容器

将 Flyway 添加到已投入生产的项目中

Flyway 命令行:无效参数:-placeholders

使用 MSSQL 将文件组添加到 flyway_schema_history 表

如何回滚 Flyway Scala 中的迁移?

如何将多个sql脚本执行到具有相同版本的flyway中