我使用的是Sping 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))]
现在Liquibase应该能够将我们的更新日志Map到MySQL或H2(或任何其他数据库),对吗?所以我认为这是Liquibase不支持H2 v2.x的问题?或者也许有一个属性,我已经错过了,现在需要设置?
TIA。
4条答案
按热度按时间6qfn3psc1#
我在迁移到Sping Boot 2.7.0时遇到了类似的错误。在我的例子中,它涉及到新的H2保留字“值”。我猜,在你的例子中,问题是在 INT 之后的标记 (10) 中。
以下是Sping Boot 文档中H2 2.1部分的引用:
Sping Boot 2.7已经升级到H2 2.1.120。H2 2.x是向后不兼容的,并修复了许多安全漏洞。有关更改的详细信息以及如何处理升级,请参阅H2 changelog和migration guide。
knsnq2tg2#
我得到了同样的错误使用MS SQL Server数据库,我解决了问题,配置休眠方言和H2在SQL Server模式中的application.properties文件中的测试资源文件夹。
或者,您可以禁用liquibase并允许自动生成表
spring.liquibase.enabled=false
1tuwyuhd3#
我有这个问题,并通过将h2降级到较低版本来修复
另一种解决方案是H2 Google Group中讨论的,其中h2引擎
mode.limit
设置在dataSourcebean中kiz8lqtg4#
为了完整起见,我在Liquibase Github repo上重新创建了一个示例bug。后来被开发人员修复了。