簡體   English   中英

如何在 Spring Boot 1.4.1 中為 @DataJpaTest 添加 mode=mysql 到嵌入式 H2 DB?

[英]How to add the mode=mysql to embedded H2 DB in Spring Boot 1.4.1 for @DataJpaTest?

我在執行 junit 測試時使用 schema.sql 文件創建我的 sql 模式時遇到一些問題,而此模式包含 mysql 特定表達式。 我必須將mode=mysql添加到 H2 url。

例如像這樣的東西: jdbc:h2:mem:testd;MODE=MYSQL

但是 Spring boot 自動使用枚舉 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 中的所有其他設置都已成功讀取。

如果我讓 spring/hibernate 在我的實體中使用 javax.persistence 注釋創建模式(沒有 schema.sql 文件),一切正常。

有添加模式的簡單方法嗎?

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")

在測試課上

我遇到了同樣的問題。 運行測試時它不會獲取 url。 我正在使用 flyway 來管理我的腳本。 通過執行以下幾個步驟,我能夠讓所有這些一起工作。

在 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*/

更新了application-test.yaml以包含模式名稱 public:

flyway:
  schemas: public

確保測試指定了配置文件: @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 腳本,否則 Hibernate 會嘗試使用 H2 方言,而 H2 已經在等待類似 MySQL 的命令。

我還嘗試為 MariaDB 10.3 使用更新鮮的MariaDB103Dialect ,但它無法正常工作。

您需要在 h2 上設置MYSQL模式並禁用替換嵌入式數據庫的數據源 url:

修改application-test.yaml

spring:
  datasource:
    url: jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false;MODE=MYSQL  
  test:
    database:
      replace: NONE

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM