Liquibase 未在 MySQL/MariaDB 上执行 SQL,但在 Spring 引导中执行 H2
Liquibase is not executing SQL on MySQL/MariaDB but H2 in Spring Boot
版本
Liquibase:3.6.2
Spring 开机:2.1.0.RELEASE
MySQL/MariaDB:mysql Ver 15.1 Distrib 10.1.25-MariaDB,适用于 Win32 (AMD64)
H2: 1.4.197
目标
我有一个迁移脚本,可以将两个 table 中的数据运行s 合并为一个。该脚本是用 SQL 编写的并且工作正常(通过手动执行验证)。此外,当 运行 使用 H2 数据库进行迁移时,它工作正常。
问题
当我切换到 MySQL/MariaDB 时,数据没有按照脚本中的定义插入。但是,根据数据库更改日志 table 脚本 运行 正确:
004.transform_translatable_data vetemi classpath:db/changelogs/0004.transfrom_translatabl... 2018-12-07 16:26:14 68 EXECUTED 8:3dc05e2db0d93de8ce10de09612dd2c0 sqlFile NULL 3.6.2 NULL NULL 4196374083
运行应用程序(日志文件)时也没有错误:
2018-12-07 16:26:14.880 INFO 13628 --- [ main] liquibase.changelog.ChangeSet : ChangeSet classpath:db/changelogs/0004.transfrom_translatable_data.yaml::004.transform_translatable_data::vetemi ran successfully in 0ms
注意日志消息的结尾,执行时间为0ms。这很可疑。
运行 H2 上的相同设置显示执行时间为 16 毫秒:
2018-12-07 16:37:40.699 INFO 13648 --- [ main] liquibase.changelog.ChangeSet : ChangeSet classpath:db/changelogs/0004.transfrom_translatable_data.yaml::004.transform_translatable_data::vetemi ran successfully in 16ms
显然脚本没有 运行,即使 Spring 和 Liquibase 没有显示任何错误。
迁移脚本:
INSERT INTO `activity_translatables` (`id`, `name`, `description`, `modified`, `created`, `language_id`, `parent_id`)
SELECT UUID(), activities.name, activities.description, activities.modified, activities.created, languages.id, activities.id
FROM `activities`, `languages`
WHERE languages.locale = 'de';
liquibase 更新日志:
- changeSet:
id: 004.transform_translatable_data
author: vetemi
changes:
- sqlFile:
dbms: h2, mysql
encoding: utf8
endDelimiter: \nGO
path: ../data/004.transform_translatable.sql
relativeToChangelogFile: true
splitStatements: true
stripComments: true
我也试过了:
- changeSet:
id: 004.transform_translatable_data
author: vetemi
changes:
- sql:
comment: transfer all activities translatables into the new table with German as default
dbms: mysql, h2
splitStatements: true
sql: insert into activities_translatables (id, name, modified, created, language_id, parent_id)
select UUID(), activities.description, activities.modified, activities.created, languages.id, activities.id
from activities, languages
where languages.locale = 'de'
stripComments: true
属性 文件:
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=root
spring.datasource.password=
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.platform=mysql
我错过了什么?为什么不起作用?
我们目前正在从 Spring Boot 1.5.x 迁移到 Spring Boot 2.1.17,我们在 Liquibase
和 MariaDB
数据库。
问题似乎是他们新区分了 MySQL
和 MariaDb
,并且此配置不再有效:
<property name="re.component.name" value="edos-dp-project-manager" />
<changeSet author="edosdp" id="1.0.0-${re.component.name}" logicalFilePath="path-independent">
<sqlFile encoding="utf8" endDelimiter=";" path="Create_DataBase.sql" relativeToChangelogFile="true" splitStatements="true" stripComments="true" dbms="mysql"/>
<sqlFile encoding="utf8" endDelimiter=";" path="Create_Database_H2.sql" relativeToChangelogFile="true" splitStatements="true" stripComments="true" dbms="h2"/>
</changeSet>
当这种情况发生时,有一条日志消息(在 DEBUG 级别!!)这样说:
2019-10-25 10:33:23,249+0200 [DEBUG] liquibase.changelog.ChangeSet edos-dp-project-manager 1.5.0-SNAPSHOT - Change sqlFile not included for database mariadb
因此,您现在需要将 DMBS 设置为 mariadb,这样更新日志如下所示:
<property name="re.component.name" value="edos-dp-project-manager" />
<changeSet author="edosdp" id="1.0.0-${re.component.name}" logicalFilePath="path-independent">
<sqlFile encoding="utf8" endDelimiter=";" path="Create_DataBase.sql" relativeToChangelogFile="true" splitStatements="true" stripComments="true" dbms="mariadb"/>
<sqlFile encoding="utf8" endDelimiter=";" path="Create_Database_H2.sql" relativeToChangelogFile="true" splitStatements="true" stripComments="true" dbms="h2"/>
</changeSet>
版本
Liquibase:3.6.2
Spring 开机:2.1.0.RELEASE
MySQL/MariaDB:mysql Ver 15.1 Distrib 10.1.25-MariaDB,适用于 Win32 (AMD64)
H2: 1.4.197
目标
我有一个迁移脚本,可以将两个 table 中的数据运行s 合并为一个。该脚本是用 SQL 编写的并且工作正常(通过手动执行验证)。此外,当 运行 使用 H2 数据库进行迁移时,它工作正常。
问题
当我切换到 MySQL/MariaDB 时,数据没有按照脚本中的定义插入。但是,根据数据库更改日志 table 脚本 运行 正确:
004.transform_translatable_data vetemi classpath:db/changelogs/0004.transfrom_translatabl... 2018-12-07 16:26:14 68 EXECUTED 8:3dc05e2db0d93de8ce10de09612dd2c0 sqlFile NULL 3.6.2 NULL NULL 4196374083
运行应用程序(日志文件)时也没有错误:
2018-12-07 16:26:14.880 INFO 13628 --- [ main] liquibase.changelog.ChangeSet : ChangeSet classpath:db/changelogs/0004.transfrom_translatable_data.yaml::004.transform_translatable_data::vetemi ran successfully in 0ms
注意日志消息的结尾,执行时间为0ms。这很可疑。
运行 H2 上的相同设置显示执行时间为 16 毫秒:
2018-12-07 16:37:40.699 INFO 13648 --- [ main] liquibase.changelog.ChangeSet : ChangeSet classpath:db/changelogs/0004.transfrom_translatable_data.yaml::004.transform_translatable_data::vetemi ran successfully in 16ms
显然脚本没有 运行,即使 Spring 和 Liquibase 没有显示任何错误。
迁移脚本:
INSERT INTO `activity_translatables` (`id`, `name`, `description`, `modified`, `created`, `language_id`, `parent_id`)
SELECT UUID(), activities.name, activities.description, activities.modified, activities.created, languages.id, activities.id
FROM `activities`, `languages`
WHERE languages.locale = 'de';
liquibase 更新日志:
- changeSet:
id: 004.transform_translatable_data
author: vetemi
changes:
- sqlFile:
dbms: h2, mysql
encoding: utf8
endDelimiter: \nGO
path: ../data/004.transform_translatable.sql
relativeToChangelogFile: true
splitStatements: true
stripComments: true
我也试过了:
- changeSet:
id: 004.transform_translatable_data
author: vetemi
changes:
- sql:
comment: transfer all activities translatables into the new table with German as default
dbms: mysql, h2
splitStatements: true
sql: insert into activities_translatables (id, name, modified, created, language_id, parent_id)
select UUID(), activities.description, activities.modified, activities.created, languages.id, activities.id
from activities, languages
where languages.locale = 'de'
stripComments: true
属性 文件:
spring.jpa.hibernate.ddl-auto=none
spring.datasource.url=jdbc:mysql://localhost:3306/db
spring.datasource.username=root
spring.datasource.password=
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
spring.datasource.platform=mysql
我错过了什么?为什么不起作用?
我们目前正在从 Spring Boot 1.5.x 迁移到 Spring Boot 2.1.17,我们在 Liquibase
和 MariaDB
数据库。
问题似乎是他们新区分了 MySQL
和 MariaDb
,并且此配置不再有效:
<property name="re.component.name" value="edos-dp-project-manager" />
<changeSet author="edosdp" id="1.0.0-${re.component.name}" logicalFilePath="path-independent">
<sqlFile encoding="utf8" endDelimiter=";" path="Create_DataBase.sql" relativeToChangelogFile="true" splitStatements="true" stripComments="true" dbms="mysql"/>
<sqlFile encoding="utf8" endDelimiter=";" path="Create_Database_H2.sql" relativeToChangelogFile="true" splitStatements="true" stripComments="true" dbms="h2"/>
</changeSet>
当这种情况发生时,有一条日志消息(在 DEBUG 级别!!)这样说:
2019-10-25 10:33:23,249+0200 [DEBUG] liquibase.changelog.ChangeSet edos-dp-project-manager 1.5.0-SNAPSHOT - Change sqlFile not included for database mariadb
因此,您现在需要将 DMBS 设置为 mariadb,这样更新日志如下所示:
<property name="re.component.name" value="edos-dp-project-manager" />
<changeSet author="edosdp" id="1.0.0-${re.component.name}" logicalFilePath="path-independent">
<sqlFile encoding="utf8" endDelimiter=";" path="Create_DataBase.sql" relativeToChangelogFile="true" splitStatements="true" stripComments="true" dbms="mariadb"/>
<sqlFile encoding="utf8" endDelimiter=";" path="Create_Database_H2.sql" relativeToChangelogFile="true" splitStatements="true" stripComments="true" dbms="h2"/>
</changeSet>