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