提问者:小点点

Spring Boot2.2.1 H2故障?


我有一个带有Spring Boot 2.2.0,H2和Flyway的项目,运行良好。Spring Boot 2.2.1 刚刚发布(所以我得到了一个 Dependabot PR),现在我的迁移像这样失败(路径/表名/列已清理):

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flywayInitializer' defined in class path resource [org/springframework/boot/autoconfigure/flyway/FlywayAutoConfiguration$FlywayConfiguration.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.command.DbMigrate$FlywayMigrateException: 
Migration V1__Creating_tableName_table.sql failed
------------------------------------------------------
SQL State  : 42001
Error Code : 42001
Message    : Syntax error in SQL statement "CREATE TABLE MY_PROJECT_TABLE (
-- table definition here
) ENGINE=[*]INNODB"; expected "identifier"; SQL statement:
CREATE TABLE my_project_table (
-- table definition here
) ENGINE=InnoDB [42001-200]
Location   : db/migration/V1__Creating_tableName_table.sql (/path/to/file.sql)
Line       : 1
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1803) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:595) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:517) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:323) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:321) ~[spring-beans-5.2.1.RELEASE.jar:5.2.1.RELEASE]

看起来它不喜欢ENGINE=INNODB部分

除了 Spring Boot 的版本之外,没有任何变化(从外观上看,这意味着一些传递依赖项,包括 H2),但我在问题或 Spring Boot 的更改日志中没有看到明显的问题表明问题出在哪里。

我猜这要么与Spring Boot将H2自动配置为测试数据库有关(也许是兼容性模式?),要么只是H2的更改,但这只是猜测,因为我很难在问题/更改日志中找到明显的原因。


共1个答案

匿名用户

除非启用MySQL兼容模式,否则您不能在H2 1.4.200中使用ENGINE=InnoDB子句。

如果要启用它,请附加 ;MODE=MySQL 到连接 URL。您可能还想添加 ;D ATABASE_TO_LOWER=TRUE 和可能 ;CASE_INSENSITIVE_IDENTIFIERS=真。这些标志不会自动启用 MySQL 兼容模式。