Mysql Liquibase无法传递changeLogParameters

Mysql Liquibase无法传递changeLogParameters,mysql,gradle,groovy,liquibase,Mysql,Gradle,Groovy,Liquibase,我正在使用liquibase gradle插件和Groovy DSL在数据库中应用变更集。我已经在gradle脚本中按照插件的设计进行了必要的配置。还有一个已标记为关闭的,似乎正在为其他用户工作。但是,这些属性在我的SQL文件中没有解析。我不确定我做错了什么。非常感谢您的指点 build.gradle的内容 buildscript { repositories { mavenCentral() } dependencies { classp

我正在使用liquibase gradle插件和Groovy DSL在数据库中应用变更集。我已经在gradle脚本中按照插件的设计进行了必要的配置。还有一个已标记为
关闭的
,似乎正在为其他用户工作。但是,这些属性在我的SQL文件中没有解析。我不确定我做错了什么。非常感谢您的指点

build.gradle的内容

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.liquibase:liquibase-gradle-plugin:1.2.4"
        classpath group: 'mysql', name: 'mysql-connector-java', version: '6.0.6'
    }
}

apply plugin: 'org.liquibase.gradle'
liquibase {
    activities {
        main {
            changeLogFile "${project.projectDir}/src/main/db/changelogs.groovy"
            changeLogParameters([
                    name    : 'foo',
                    category: 'bar'
            ])
            url "jdbc:mysql://localhost/test?nullNamePatternMatchesAll=true"
            username 'test'
            password 'test'
            driver 'com.mysql.jdbc.Driver'
        }
    }
}
changelogs.groovy的内容

databaseChangeLog(logicalFilePath: '/db/changelogs.groovy') {

    changeSet(id: '1', author: 'abc', runAlways: true) {

        comment 'Init.'
        sqlFile(path: 'scripts/init.sql', relativeToChangelogFile: true)

    }
}
init.sql的内容

USE TEST;

DROP TABLE IF EXISTS MY_TABLE;

CREATE TABLE MY_TABLE(
    NAME VARCHAR(100),
    CATEGORY VARCHAR(100)
);

INSERT INTO MY_TABLE VALUES ('${name}', '${category}');

COMMIT;
SQL输出:

mysql-sql> select * from  my_table;
+---------+-------------+
| NAME    | CATEGORY    |
+---------+-------------+
| ${name} | ${category} |
+---------+-------------+
1 row in set (0.00 sec)
在这里,我希望表中分别包含name和category的'foo'和'bar'


代码在上可用。

我的最佳猜测是您需要替换此行:

INSERT INTO MY_TABLE VALUES ('${name}', '${category}');
为此:

INSERT INTO MY_TABLE VALUES ("${name}", "${category}");
不同之处在于,第一行使用单引号将其转换为文字字符串。第二行使用双引号,允许字符串插值(也称为字符串模板)

这里有一段引用自

还要注意中单引号和双引号之间的区别 Groovy:单引号总是创建Java字符串,没有 变量的插值,而双引号创建Java 存在插值变量时的字符串或gstring


阅读更多关于单引号、双引号和三引号字符串的信息:

在新版本中,这似乎是一个bug。我可以使用指定的版本
1.1.1
将参数传递到changelog文件,但是,这仍然没有进入SQL文件。

我尝试过,但似乎不起作用。输出似乎是一样的。问题似乎是参数没有被传递到
changelogs.groovy
文件中,因为当我尝试打印值时,更新就失败了。任务“”的执行失败:更新“”>liquibase.exception.LiquibaseException:运行liquibase时出现意外错误:没有这样的属性:类的名称:org.liquibase.groovy.delegate.changesetdelegate如何<代码>插入MY_表值(“${name}'”、“${category}”)或另一种方法:
插入MY_表值(“${name}”、“${category}”)我已使用上述代码在上创建了一个存储库。您能否验证您的更改是否有效?