Playframework 在测试模式下使用带有播放功能的flyway:Schema“;“公众”;找不到

Playframework 在测试模式下使用带有播放功能的flyway:Schema“;“公众”;找不到,playframework,h2,slick,flyway,play-slick,Playframework,H2,Slick,Flyway,Play Slick,我(成功地)在开发和生产模式下使用了FlywayPlay插件。我还想在测试模式下使用它。 文档中说,它在测试模式下自动运行迁移 我使用scala测试,我的测试用例包装在一个带有 val fakeApplication = FakeApplication(additionalConfiguration = Map( "db.default.driver"->"org.h2.Driver", "db.default.url"->"jdbc:h2:mem:test;MODE=MyS

我(成功地)在开发和生产模式下使用了FlywayPlay插件。我还想在测试模式下使用它。 文档中说,它在测试模式下自动运行迁移

我使用scala测试,我的测试用例包装在一个带有

val fakeApplication = FakeApplication(additionalConfiguration = Map(
  "db.default.driver"->"org.h2.Driver",
  "db.default.url"->"jdbc:h2:mem:test;MODE=MySQL;DB_CLOSE_DELAY=-1;",
  "db.default.user"->"",
  "db.default.password"->""
))
运行测试用例时,自动迁移失败,出现“未找到架构公共”:

这个错误到底意味着什么?为什么它使用公共模式?我的数据库配置定义了“db.default”,而不是“db.public”。什么是公共模式?我没有给它下定义

关于如何让测试用例运行(或者至少更进一步)有什么想法吗

编辑

我在h2 db url中找到了不使用MODE=MySQL的提示()。不幸的是,我似乎需要它的光滑。如果我不使用它,我会

[info]   com.googlecode.flyway.core.command.FlywaySqlScriptException: Error executing statement at line 10: SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"
[info]   at com.googlecode.flyway.core.dbsupport.SqlScript.execute(SqlScript.java:92)
[info]   at com.googlecode.flyway.core.resolver.sql.SqlMigrationExecutor.execute(SqlMigrationExecutor.java:72)
[info]   at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:243)
[info]   at com.googlecode.flyway.core.command.DbMigrate$2.doInTransaction(DbMigrate.java:241)
[info]   at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
[info]   at com.googlecode.flyway.core.command.DbMigrate.applyMigration(DbMigrate.java:241)
[info]   at com.googlecode.flyway.core.command.DbMigrate.access$700(DbMigrate.java:44)
[info]   at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:186)
[info]   at com.googlecode.flyway.core.command.DbMigrate$1.doInTransaction(DbMigrate.java:135)
[info]   at com.googlecode.flyway.core.util.jdbc.TransactionTemplate.execute(TransactionTemplate.java:72)
[info]   ...
[info]   Cause: org.h2.jdbc.JdbcSQLException: Syntax Fehler in SQL Befehl "SET SQL_MODE[*] = ""NO_AUTO_VALUE_ON_ZERO"""; erwartet "@, AUTOCOMMIT, MVCC, EXCLUSIVE, IGNORECASE, PASSWORD, SALT, MODE, COMPRESS_LOB, DATABASE, COLLATION, BINARY_COLLATION, CLUSTER, DATABASE_EVENT_LISTENER, ALLOW_LITERALS, DEFAULT_TABLE_TYPE, CREATE, HSQLDB.DEFAULT_TABLE_TYPE, PAGE_STORE, CACHE_TYPE, FILE_LOCK, DB_CLOSE_ON_EXIT, AUTO_SERVER, AUTO_SERVER_PORT, AUTO_RECONNECT, ASSERT, ACCESS_MODE_DATA, OPEN_NEW, JMX, PAGE_SIZE, RECOVER, NAMES, SCHEMA, DATESTYLE, SEARCH_PATH, SCHEMA_SEARCH_PATH, LOGSIZE"
[info] Syntax error in SQL statement "SET SQL_MODE[*] = ""NO_AUTO_VALUE_ON_ZERO"""; expected "@, AUTOCOMMIT, MVCC, EXCLUSIVE, IGNORECASE, PASSWORD, SALT, MODE, COMPRESS_LOB, DATABASE, COLLATION, BINARY_COLLATION, CLUSTER, DATABASE_EVENT_LISTENER, ALLOW_LITERALS, DEFAULT_TABLE_TYPE, CREATE, HSQLDB.DEFAULT_TABLE_TYPE, PAGE_STORE, CACHE_TYPE, FILE_LOCK, DB_CLOSE_ON_EXIT, AUTO_SERVER, AUTO_SERVER_PORT, AUTO_RECONNECT, ASSERT, ACCESS_MODE_DATA, OPEN_NEW, JMX, PAGE_SIZE, RECOVER, NAMES, SCHEMA, DATESTYLE, SEARCH_PATH, SCHEMA_SEARCH_PATH, LOGSIZE"; SQL statement:
[info] SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO" [42001-172]
[info]   at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
[info]   at org.h2.message.DbException.get(DbException.java:169)
[info]   at org.h2.message.DbException.getSyntaxError(DbException.java:194)
[info]   at org.h2.command.Parser.getSyntaxError(Parser.java:491)
[info]   at org.h2.command.Parser.parseSet(Parser.java:4676)
[info]   at org.h2.command.Parser.parsePrepared(Parser.java:407)
[info]   at org.h2.command.Parser.parse(Parser.java:279)
[info]   at org.h2.command.Parser.parse(Parser.java:255)
[info]   at org.h2.command.Parser.prepareCommand(Parser.java:218)
[info]   at org.h2.engine.Session.prepareLocal(Session.java:425)
因此,slick似乎使用H2不支持的SQL命令,而不使用MODE=MySQL(或者我在这里错了吗?)

使用


如果MODE=MySQL不存在,则会产生相同的错误(与上面框中显示的错误完全相同)

将flyway.schemas设置为PUBLIC(所有大写),您应该会没事。(我希望:-)

application.properties中的这一行可以使用或使用或mysql模式

spring.datasource.url=jdbc:h2:mem:test;MODE=MYSQL;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS \"public\"\\;

我也有同样的问题。INIT=CREATE SCHEMA IF NOT EXISTS \“public\”\\足以修复它(不设置flyway.schemas)
"jdbc:h2:mem:test;MODE=MySQL;DB_CLOSE_DELAY=-1;INIT=CREATE SCHEMA IF NOT EXISTS \"public\"\\;"
spring.datasource.url=jdbc:h2:mem:test;MODE=MYSQL;DB_CLOSE_ON_EXIT=FALSE;INIT=CREATE SCHEMA IF NOT EXISTS \"public\"\\;