このスキーマにmysql固有の式が含まれている間にjunitテストを実行するときに、schema.sqlファイルを使用してsqlスキーマを作成すると問題が発生します。 mode=mysql
をH2 URLに追加する必要があります。
たとえば、次のようなものです:jdbc:h2:mem:testd;MODE=MYSQL
ただし、Springブートでは、enum org.springframework.boot.autoconfigure.jdbc.EmbeddedDatabaseConnectionで定義されたURLとそのURLが自動的に使用されます
jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE
。
これを機能させるための同様のアプローチを試みましたが、springはtest-application.propertiesからspring.datasource.url=jdbc:h2:mem:testdb;MODE=MYSQL
を取得しません。 test-application.propertiesの他の設定はすべて正常に読み取られました。
エンティティにjavax.persistenceアノテーションを付けてspring/hibernateにスキーマ(schema.sqlファイルなし)を作成させると、すべて正常に動作します。
モードを追加する簡単な方法はありますか?
私はこれと同じ問題を抱えていました。テストの実行時にURLを取得しませんでした。フライウェイを使用してスクリプトを管理しています。これらのいくつかの手順に従うことで、これらすべてを連携させることができました。
Src/test/resources/db/migrationに_V1_init.sql
_スクリプトを作成して、flywayによって実行される最初のスクリプトになるようにしました。
_SET MODE MYSQL; /* another h2 way to set mode */
CREATE SCHEMA IF NOT EXISTS "public"; /* required due to issue with flyway --> https://stackoverflow.com/a/19115417/1224584*/
_
スキーマ名publicを含めるために_application-test.yaml
_を更新しました:
_flyway:
schemas: public
_
テストでプロファイルが指定されていることを確認します:@ActiveProfiles("test")
セットする
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
application-test.propertiesに加えて、
@RunWith(SpringRunner.class)
@DataJpaTest
@AutoConfigureTestDatabase(replace = AutoConfigureTestDatabase.Replace.NONE)
@ActiveProfiles("test")
テストクラスで
私はこれを機能させるために同様のアプローチを試みましたが、springはtest-application.propertiesからspring.datasource.url = jdbc:h2:mem:testdb; MODE = MYSQLを取得しません
既存のパラメーターを書き換える代わりに、このパラメーターを追加しようとしましたか?
spring.datasource.url=jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE;MODE=MYSQL
Test-application.propertiesの他の設定はすべて正常に読み取られました。
そのファイルにはapplication-test.properties
。
この設定で実行できました:
# for integration tests use H2 in MySQL mode
spring.datasource.url=jdbc:h2:mem:testdb;DATABASE_TO_LOWER=TRUE;MODE=MySQL;
spring.jpa.database-platform=org.hibernate.dialect.MariaDBDialect
ここでの主なトリックは、HibernateがMariaDBダイアレクトのSQLスクリプトを生成するように強制することです。
また、MariaDB 10.3にもっと新しいMariaDB103Dialect
を使用しようとしましたが、正しく機能しませんでした。