Ich verwende liquibase-gradle-plugin und Groovy DSL, um die changesets in meiner Datenbank zu übernehmen. Ich habe notwendige Konfigurationen in den Skripten gemacht, wie in der documentation des Plugins. Es gibt auch eine relevant issue, die als Closed
markiert wurde und scheint für andere Benutzer zu arbeiten. Die Eigenschaften werden jedoch nicht in meiner SQL-Datei aufgelöst. Ich bin mir nicht sicher, was ich falsch mache. Alle Hinweise werden sehr geschätzt.Liquibase kann changeLogParameters nicht übergeben
Inhalt 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'
}
}
}
Inhalt changelogs.groovy
databaseChangeLog(logicalFilePath: '/db/changelogs.groovy') {
changeSet(id: '1', author: 'abc', runAlways: true) {
comment 'Init.'
sqlFile(path: 'scripts/init.sql', relativeToChangelogFile: true)
}
}
Inhalt von 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 Output:
mysql-sql> select * from my_table;
+---------+-------------+
| NAME | CATEGORY |
+---------+-------------+
| ${name} | ${category} |
+---------+-------------+
1 row in set (0.00 sec)
Hier hätte ich erwartet, dass die Tabelle 'foo' und 'bar' für Name und Kategorie enthalten würde.
Der Code ist verfügbar unter GitHub.
Ich habe das versucht und scheint nicht zu funktionieren. Die Ausgabe scheint die gleiche zu sein. –
Das Problem scheint zu sein, dass die Parameter nicht in die 'changelogs.groovy'-Datei übertragen werden, da beim Versuch, die Werte auszudrucken, das Update einfach fehlschlägt. Ausführung fehlgeschlagen für Task ': update'. > liquibase.exception.LiquibaseException: Unerwarteter Fehler beim Ausführen von Liquibase: Keine solche Eigenschaft: Name für Klasse: org.liquibase.groovel.delegate.ChangeSetDelegate –
Wie wäre es damit?'INSERT IN MY_TABLE VALUES ('' $ {name} '', '' $ {category} '"); ' –