Spring Boot 2.7.0 Liquibase 失败并显示“更改集的迁移文件”

Cyn*_*nan 9 h2 liquibase spring-boot

我使用 Spring Boot 2.6.8 和 Liquibase,效果很好。在生产环境中运行时,它与 MySQL 数据库一起使用。对于集成测试,我们针对内存数据库中的 H2 运行它。

自从升级到 SB 2.7.0(将 H2 v1.4.200 切换到 v2.1.212)后,Liquibase 就会失败,H2 会出现在内存数据库中。

Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'liquibase' defined in class path resource [org/springframework/boot/autoconfigure/liquibase/LiquibaseAutoConfiguration$LiquibaseConfiguration.class]: 
Invocation of init method failed; nested exception is liquibase.exception.LiquibaseException: liquibase.exception.MigrationFailedException: Migration failed for change set changelog/0.3.0/tables/file_type.xml::1437572803912-1::bobd (generated):
Reason: liquibase.exception.DatabaseException: Syntax error in SQL statement "CREATE TABLE PUBLIC.FILE_TYPE (ID INT[*](10) GENERATED BY DEFAULT AS IDENTITY NOT NULL, NAME VARCHAR(45) NOT NULL, CONSTRAINT PK_FILE_TYPE PRIMARY KEY (ID))";
expected "ARRAY, INVISIBLE, VISIBLE, NOT, NULL, AS, DEFAULT, GENERATED, ON, NOT, NULL, AUTO_INCREMENT, DEFAULT, NULL_TO_DEFAULT, SEQUENCE, SELECTIVITY, COMMENT, CONSTRAINT, COMMENT, PRIMARY, UNIQUE, NOT, NULL, CHECK, REFERENCES, AUTO_INCREMENT, ,, )";
SQL statement: CREATE TABLE PUBLIC.FILE_TYPE (ID INT(10) GENERATED BY DEFAULT AS IDENTITY NOT NULL, NAME VARCHAR(45) NOT NULL, CONSTRAINT PK_FILE_TYPE PRIMARY KEY (ID)) [42001-212] 
[Failed SQL: (42001) CREATE TABLE PUBLIC.FILE_TYPE (ID INT(10) GENERATED BY DEFAULT AS IDENTITY NOT NULL, NAME VARCHAR(45) NOT NULL, CONSTRAINT PK_FILE_TYPE PRIMARY KEY (ID))]
Run Code Online (Sandbox Code Playgroud)

现在 Liquibase 应该能够将我们的变更日志映射到 MySQL 或 H2(或任何其他数据库),对吗?所以我认为这是 Liquibase 无法正确支持 H2 v2.x 的问题?或者也许有一个我错过的属性现在需要设置?

TIA。

小智 5

迁移到 Spring Boot 2.7.0 时我遇到了类似的错误。就我而言,它涉及新的 H2 保留字“value”。我想,在你的情况下,问题出在INT之后的令牌(10)中。

以下是Spring Boot 文档中H2 2.1部分的引用:

Spring Boot 2.7 已升级至 H2 2.1.120。H2 2.x 向后不兼容,并修复了许多安全漏洞。有关更改的详细信息以及如何处理升级,请参阅 H2 更改日志迁移指南。