使用 h2 启用 Flyway 时,我遇到以下错误。
版本:
Spring Boot v2.7.8, Spring v5.3.25
"flyway", "7.2.1"
"h2", "2.1.214"
应用程序 yaml:
spring:
cache:
enabled: false
datasource:
url: jdbc:h2:mem:ppyDB;MODE=Oracle
username: sa
password:
driverClassName: org.h2.Driver
initialize: true
flyway:
enabled: true
jpa:
database-platform: org.hibernate.dialect.H2Dialect
h2:
console:
enabled: true
path: /h2-console
应用程序启动错误
错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in class path resource [myapp/config/FlywayConfig.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.exception.FlywaySqlException:
Unable to determine H2 compatibility mode
-----------------------------------------
SQL State : 42001
Error Code : 42001
Message : Syntax error in SQL statement "SELECT [*]VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME = 'MODE'"; expected "DISTINCT, ALL, *, INTERSECTS (, NOT, EXISTS, UNIQUE, INTERSECTS"; SQL statement:
SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME = 'MODE' [42001-214]
Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Syntax error in SQL statement "SELECT [*]VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME = 'MODE'"; expected "DISTINCT, ALL, *, INTERSECTS (, NOT, EXISTS, UNIQUE, INTERSECTS"; SQL statement:
SELECT VALUE FROM INFORMATION_SCHEMA.SETTINGS WHERE NAME = 'MODE' [42001-214]
但是,如果在没有 h2 的情况下构建应用程序(而不是使用 Oracle DB),请参阅以下错误
错误:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'flyway' defined in class path resource [myapp/config/FlywayConfig.class]: Invocation of init method failed; nested exception is org.flywaydb.core.internal.license.FlywayEditionUpgradeRequiredException: Flyway Teams Edition or Oracle upgrade required: Oracle 12.1 is no longer supported by Flyway Community Edition, but still supported by Flyway Teams Edition.
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1804)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620)
.....
Caused by: org.flywaydb.core.internal.license.FlywayEditionUpgradeRequiredException: Flyway Teams Edition or Oracle upgrade required: Oracle 12.1 is no longer supported by Flyway Community Edition, but still supported by Flyway Teams Edition.
at org.flywaydb.core.internal.database.base.Database.ensureDatabaseNotOlderThanOtherwiseRecommendUpgradeToFlywayEdition(Database.java:165)
at org.flywaydb.core.internal.database.oracle.OracleDatabase.ensureSupported(OracleDatabase.java:84)